정수를 배열에 하나씩 입력해야합니다. 입력 과정이 진행되는 동안 숫자의 최상위 (가장 큰) 1/3에서 가장 작은 숫자를 찾도록 요청받을 수 있지만, 여러 번.파티션을 가진 선택 알고리즘
예 :
input 1
input 7
input 9
tell the number
input 21
input 8
input 5
tell the number
input 11
tell the number
출력해야한다 :
9
9
11
설명 :
-
첫 번째 쿼리까지
- 배열 번호 1 7 9 것, 그래서 상위 1/세번째 숫자는 9. 일 것입니다. 그것들은 단 하나의 숫자이므로 그것도 가장 작습니다.
- 초 쿼리가 정렬 배열 것에 있도록 배열,
1 7 9 21 8 5
과 같을 것이다 이루어질 때 : 최종 쿼리
상위 1/3 숫자가 21이 될 것이다21 9 8 7 5 1
및 9. 그 의 작은이 될 것입니다 9 - 어레이 (21) 및 이들의 최소 11 것
21 11 9 8 7 5 1
상부 1/3 참조 정렬에1 7 9 21 8 5 11
을 보유하는 제
인 배열 정수의 총 개수가 될 수 250,000
내 접근 파티션과 선택 알고리즘을 적용하는 것입니다하지만 그것은 제한 시간을 초과했습니다.
숙제? 질문이 뭐야 ? –
문제는 잘못되었습니다. 세 번째 요청이있을 때 집합에는 7 개의 숫자가 포함되어 있으므로 세 번째 부분이 무엇인지 모호합니다. 일곱 가지 주문한 물건은 3 + 2 + 2 또는 2 + 3 + 2 또는 2 + 2 + 3과 같이 가능한 한 동등한 부분으로 세분 될 수 있으므로 '상위 1/3'에 '21 11 9 '또는'21 11 '이되어 결과는'9 '또는'11 '이됩니다. 작업 설명은 점이 왜 11이 아니라 9가되어야 하는지를 정의합니다. – CiaPan