장관 문제는 이렇게 설명 유명한 문제이다 :
- 새 비서가 필요합니다
- 한 번에 하나씩 인터뷰 할 수있는 N 명의 지원자가 있습니다.
- 면접 후 각 지원자를 채점 할 수 있습니다. 점수 시스템은 두 명의 지원자에게 동일한 점수를 부여하지 않습니다.
- 지원자를 인터뷰 한 후에는 즉시 "예"또는 "아니오"를 제공해야합니다
- 당신은 가장 높은 점수를 가진 지원자를 원합니다
해결책은 첫 번째 floor(N/e)
지원자 를 인터뷰 한 다음 이전의 모든 지원자보다 높은 점수를받은 첫 번째 지원자를 수락하는 것입니다. 더 높은 지원자가 없으면 마지막 지원자를 반환하십시오. 흥미롭게도, 이것은 최고 지원자 1/e
시간의 백분율을 제공합니다 . 오일러 수를e
나타냅니다 . 의 값을 얻으려면 내장을 사용 하거나 소수점 다섯 자리 이상으로 하드 코딩 할 수 있습니다 .e
log
입력:
고유하지 않은 음이 아닌 정수로 구성된 비어 있지 않은 배열입니다 2^31-1
.
산출:
선택한 후보를 나타내는 정수 알고리즘을 명확히하려면 다음과 같습니다.
floor(N/e)
배열 의 첫 번째 요소 에서 최대 요소를 찾으십시오 .- 나머지 요소를 반복하고 1 단계에서 찾은 최대 값보다 큰 첫 번째 요소를 리턴하십시오.
- 더 높은 요소가 없으면 마지막 요소를 반환합니다.
예를 들어, 배열했다 말을 [2,7,4,3,9,20]
그렇게 N = 6
하고 floor(N/e) = 2
. 배열의 처음 2 개 요소는 [2,7]
입니다. 의 최대 값은 [2,7]
입니다 7
. 나머지 요소는 [4,3,9,20]
입니다. 보다 큰 첫 번째 요소 7
이다는 9
, 그래서 우리는 반환 9
.
테스트 사례 :
[0] => 0
[100] => 100
[100, 45] => 100
[0, 1] => 0
[45, 100] => 45
[1, 4, 5] => 4
[1, 5, 4] => 5
[5, 4, 1] => 1
[5, 1, 4] => 4
[4, 1, 5] => 5
[56, 7, 37, 73, 90, 59, 65, 61, 29, 16, 47, 77, 60, 8, 1, 76, 36, 68, 34, 17, 23, 26, 12, 82, 52, 88, 45, 89, 94, 81, 3, 24, 43, 55, 38, 33, 15, 92, 79, 87, 14, 75, 41, 98, 31, 58, 53, 72, 39, 30, 2, 0, 49, 99, 28, 50, 80, 91, 83, 27, 64, 71, 93, 95, 11, 21, 6, 66, 51, 85, 48, 62, 22, 74, 69, 63, 86, 57, 97, 32, 84, 4, 18, 46, 20, 42, 25, 35, 9, 10, 19, 40, 54, 67, 70, 5, 44, 13, 78, 96]
=> 98
[10, 68, 52, 48, 81, 39, 85, 54, 3, 21, 31, 59, 28, 64, 42, 90, 79, 12, 63, 41, 58, 57, 13, 43, 74, 76, 94, 51, 99, 67, 49, 14, 6, 96, 18, 17, 32, 73, 56, 7, 16, 60, 61, 26, 86, 72, 20, 62, 4, 83, 15, 55, 70, 29, 23, 35, 77, 98, 92, 22, 38, 5, 50, 82, 1, 84, 93, 97, 65, 37, 45, 71, 25, 11, 19, 75, 78, 44, 46, 2, 53, 36, 0, 47, 88, 24, 80, 66, 87, 40, 69, 27, 9, 8, 91, 89, 34, 33, 95, 30]
=> 30
솔루션은입니다 O(n)
. 여기서 n
배열의 길이는입니다. 언어에 배열의 최대 값을 찾는 내장 함수가있는 경우 함수가 수행한다고 가정 할 수 있습니다 O(n)
.
표준 허점이 적용되며 이것은 코드 골프 이므로 가장 좋아하는 언어로 가장 짧은 답변을하십시오!
e
(예를 들어 파이썬, e=2.71828
보다 짧은 import math;math.E
)
e
사용해야합니까?