Suchen Sie das unduplicated Element in einem sortierten Array

7

Quelle: Microsoft-Interviewfrage

Bei einem sortierten Array, in dem jedes Element zweimal vorhanden ist, mit Ausnahme eines Elements, das nur einmal vorhanden ist, müssen wir dieses Element finden.

Eine Standard-O (n) -Lösung besteht nun darin, eine XOR-Liste zu erstellen, die das nicht duplizierte Element zurückgibt (da alle duplizierten Elemente ausgelöscht werden).

Ist es möglich, dies schneller zu lösen, wenn wir wissen, dass das Array sortiert ist?

    
Spandan 14.06.2013, 21:14
quelle

2 Antworten

14

Ja, Sie können die Sortierung verwenden, um die Komplexität auf O(log n) zu reduzieren, indem Sie eine binäre Suche durchführen.

Da das Array vor dem fehlenden Element sortiert ist, belegt jeder Wert die Punkte 2*k und 2*k+1 im Array (bei 0-basierter Indizierung vorausgesetzt).

Sie gehen also in die Mitte des Arrays, sagen den Index h , und überprüfen entweder den Index h+1 , wenn h gerade ist, oder h-1 , wenn h ungerade ist. Wenn das fehlende Element später kommt, sind die Werte an diesen Positionen gleich, wenn es vorher kommt, sind die Werte unterschiedlich. Wiederholen Sie dies, bis das fehlende Element gefunden wurde.

    
Daniel Fischer 14.06.2013, 21:21
quelle
6

Machen Sie eine binäre "Suche" (eher Traversal) auf dem Array, überprüfen Sie beide Nachbarn, wenn beide von dem Wert in der Mitte abweichen, haben Sie die Lösung. Das ist O(log n) .

    
user529758 14.06.2013 21:22
quelle