2013-06-14 17 views
7

Źródło: Microsoft pytanie wywiadZnajdź element niepowtarzających w posortowanej tablicy

Biorąc posortowaną tablicę, w której każdy element jest dwukrotnie występuje z wyjątkiem jednego, który jest obecny jeden raz, musimy znaleźć ten element .

Teraz standardem O (n) rozwiązaniem jest zrobić XOR z listy, która będzie zwracać element niepowtarzających (ponieważ wszystkie zduplikowane elementy znoszą się.)

Czy możliwe jest szybsze, jeśli wiemy rozwiązać ten problem tablica jest posortowana?

+7

Wykonaj binarne "przeszukiwanie" (raczej traversal) w tablicy, sprawdź obu sąsiadów, jeśli bot jest inny niż średnia wartość, masz rozwiązanie. To jest 'O (log n)'. –

+0

@ H2CO3 jak to zrobić? Czy nie sąsiedzi zawsze będą inni? –

+0

@ZiyaoWei Nopeeeee! Po prostu nie mówię po angielsku. Jeżeli tablica jest posortowana, ('1 1 2 2 3 4 4'), to jeden sąsiad jest taki sam jak wartość centralna. –

Odpowiedz

14

Tak, możesz użyć sortowania, aby zmniejszyć złożoność do O(log n), wykonując wyszukiwanie binarne.

Ponieważ tablica jest posortowana, przed brakującym elementem, każda wartość zajmuje plamy 2*k i 2*k+1 w tablicy (przy założeniu indeksowania opartego na 0).

więc udać się do środkowej części tablicy, powiedzmy indeksu h i sprawdzić zarówno indeks h+1 jeśli h jest parzysta, czy h-1 jeśli h jest nieparzysta. Jeśli brakujący element pojawi się później, wartości na tych pozycjach są równe, jeśli występują wcześniej, wartości są różne. Powtarzaj aż do znalezienia brakującego elementu.

+3

To jest genialne. Świetna odpowiedź! – templatetypedef

+1

A teraz dostajesz upvoted za odpowiedź, którą zamieściłem w swoim komentarzu 3 minuty temu. Sill me :) –

+3

@ H2CO3 Ale on wyjaśnia algorytm jaśniej :) –

6

Wykonaj binarne "wyszukiwanie" (raczej traversal) w tablicy, sprawdź oba sąsiadów, jeśli oba są różne od wartości w środku, masz rozwiązanie. To jest O(log n).

+0

jeśli oba są takie same, to? .. idę w lewo lub w prawo? – Spandan

+1

Nie rozumiałeś d pytania, myślę! – Spandan

+2

@Spandan Doskonale to zrozumiałem. –

Powiązane problemy