Sekreter Sorun şöyle anlatılabilir ünlü bir sorundur:
- Yeni bir sekretere ihtiyacınız var
- Bir kerede bir görüşme yapabileceğiniz N adayınız var
- Mülakattan sonra her adayı puanlayabilirsiniz. Puanlama sisteminiz asla iki başvuru sahibine aynı puanı vermeyecektir
- Bir başvuru sahibiyle görüştükten sonra, derhal bir "evet" veya "hayır"
- En yüksek puanı alan başvuru sahibini istiyorsunuz
Çözüm, ilk floor(N/e)
başvuru sahipleriyle görüşmek ve ardından önceki başvuru sahiplerinden daha yüksek puanı alan ilk başvuru sahibini kabul etmektir. Başvuru sahiplerinden hiçbiri daha yüksek değilse, son başvuru sahibini iade edin. İlginçtir ki, bu en iyi başvuru sahibine 1/e
zamanın yüzdesini verir . Euler numarasınıe
ifade eder . Değerini elde etmek için bir yerleşkeyi kullanabilir veya en az 5 ondalık basamağa sabit kodlayabilirsiniz.e
log
Giriş:
Boş olmayan benzersiz negatif olmayan tamsayılar dizisi en fazla 2^31-1
.
Çıktı:
Seçilen adayı temsil eden bir tam sayı. Açık olmak gerekirse algoritma:
floor(N/e)
Dizinin ilk öğelerinde maksimum öğeyi bulun .- Kalan öğeler arasında yineleme yapın ve 1. adımda bulunan maksimum değerden daha yüksek olan ilk öğeyi döndürün.
- Elemanların hiçbiri daha yüksek değilse, son elemanı döndürmektense.
Örneğin, dizi olduğunu söylemek [2,7,4,3,9,20]
bu yüzden, N = 6
ve floor(N/e) = 2
. Dizinin ilk 2 öğesi [2,7]
. Maksimum [2,7]
DİR 7
. Kalan elemanlar [4,3,9,20]
. Daha büyüktür birinci unsur 7
olduğunu 9
, bu yüzden dönmek 9
.
Test Durumları:
[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
Çözümünüz , dizinin uzunluğu O(n)
nerede olmalıdır n
. Dilinizde bir dizinin maksimumu bulan bir yerleşik varsa, işlevin alındığını varsayabilirsiniz O(n)
(ve umarım yapar).
Standart boşluklar uygulanır ve bu bir kod golfüdür , bu yüzden en sevdiğiniz dilde en kısa cevabı verin!
e
(örn Python, e=2.71828
daha kısadır import math;math.E
)
e
kullanılmalı?