Przeprowadziłem wywiad z Amazon kilka dni temu. Nie mogłem odpowiedzieć na jedno z pytań, które zadał mi do zadowolenia. Próbowałem uzyskać odpowiedź po wywiadzie, ale jak dotąd nie udało mi się. Oto pytanie:Minimalna wartość maksymalnych wartości w podsegmentach ... w złożoności O (n)
Masz tablicę liczb całkowitych o wielkości n. Dostaniesz parametr k
gdzie k < n
. Dla każdego segmentu kolejnych elementów o rozmiarze k
w tablicy należy obliczyć wartość maksymalną. Musisz tylko zwrócić minimalną wartość tych maksymalnych wartości.
Na przykład podając 1 2 3 1 1 2 1 1 1
i k = 3
odpowiedź brzmi: 1
.
Segmenty byłoby 1 2 3
, 2 3 1
, 3 1 1
, 1 1 2
, 1 2 1
, 2 1 1
, 1 1 1
.
Maksymalne wartości w każdym segmencie są 3
, 3
, 3
, 2
, 2
, 2
, 1
.
Minimalna z tych wartości to 1
, więc odpowiedź brzmi: 1
.
Najlepsza odpowiedź, jaką wymyśliłem, to złożoność O (n log k). Co mogę zrobić, to utworzyć binarne drzewo wyszukiwania z pierwszymi elementami k
, uzyskać maksymalną wartość w drzewie i zapisać je w zmiennej minOfMax
, a następnie zapętlić po jednym elemencie z pozostałymi elementami w tablicy, usunąć pierwszy element poprzedni segment z drzewa wyszukiwania binarnego, wstaw ostatni element nowego segmentu w drzewie, uzyskaj maksymalny element w drzewie i porównaj go z minOfMax
, pozostawiając w minOfMax
minimalną wartość dwóch.
Idealna odpowiedź musi być złożona O (n). Dziękuję.
Ładne rozwiązanie, ale straszne pytanie z wywiadu. Albo znasz tę strukturę danych, a problem jest banalny; albo nie jesteś, a problem jest niemożliwy. (Chyba, że chcesz udawać, że wymyśliłeś to podczas wywiadu?) Zastanawiam się, czy istnieje bardziej bezpośrednie podejście, czy jest to po prostu nieudane pytanie do wywiadu. – Nemo
@ Nemo- Tylko wiedziałem, jak rozwiązać ten problem, ponieważ wiedziałem o strukturze danych min-queue, o której wiedziałem tylko dlatego, że spędziłem cztery godziny próbując dowiedzieć się, jak to zrobić przed zobaczeniem implementacji dwóch stosów w oparciu o Min-stack, który sam w sobie jest trudnym pytaniem do wywiadu. Myślę, że może być łatwiejszy sposób rozwiązania tego problemu, ale szczerze mówiąc nie mam pojęcia, jak podejść do tego problemu w jakikolwiek inny sposób. – templatetypedef
Myślałem o tym trochę, i też tego nie widzę. To, że chcesz tylko jednej wartości na końcu (nawet jej lokalizacji), jest kuszące, ale po prostu nie rozumiem, jak ją wykorzystać. – Nemo