2016-06-16 6 views
2

Ich fand diese Antwort: Quickest way to find missing number in an array of numbers, das ist toll, wenn Sie nur eine Nummer fehlt haben.Was ist der schnellste Weg, um alle fehlenden Nummern in unsortiertem Array zu finden

Weiter zu dieser Frage - Ich habe mich gefragt, was ist die beste (und schnellste) Möglichkeit, alle fehlenden Zahlen zu finden und auch das unsortierte Array zu sortieren. (Für das Beispiel ist das Array wie das in der verknüpften Frage beschriebene - die Array-Größe ist 100, mit Zufallszahlen von 1-100, aber einige von ihnen fehlen)

+0

"Ich habe mich gefragt, was der beste (und schnellste) Weg ist, alle fehlenden Zahlen zu finden und auch das unsortierte Array zu sortieren" - beides zur gleichen Zeit? Oder "am schnellsten zum Sortieren" und "am schnellsten für fehlende Zahlen" unabhängig? – Fildor

+0

mein Fehler - ich habe am schnellsten für fehlende Zahlen bedeutet. – Nimrod

+0

Ich glaube nicht, dass wir es besser machen können als O (n), weil wir einmal die ganze Anordnung durchqueren müssen, ob zum Sortieren oder um die fehlenden Nummern zu finden. – pbajpai21

Antwort

5

Offensichtlich sind die Zahlen in einem bestimmten Bereich oder es macht keinen Sinn, über fehlende Zahlen zu sprechen. Daher kann eine counting sort angewendet werden. Führen Sie dann einen linearen Scan durch das Array durch, um die Löcher zu finden. Alternativ könnten Sie die Zählungen vom Sortierschritt scannen, um die fehlenden Elemente zu finden.

Dies alles läuft in O (n).

Beispiel: Das folgende Array ist mit 6,1,7,8,3,4,9,1,10,3 angegeben.

nun berechnen, wie oft jede Zahl in dem Feld erscheint einmal durch das Array, indem Sie und Erhöhen der Zählung für jede angetroffen Nummer:

number 1 2 3 4 5 6 7 8 9 10 
count 2 0 2 1 0 1 1 1 1 1 

Sie sofort sehen, dass 2 und 5 0 Mal erschienen und sind daher fehlt.

Die Zählungen können auch verwendet werden, um ein sortiertes Array zu erstellen: Wir brauchen 2 mal 1, 2 mal 3, 1 mal 4 usw.

+0

Entschuldigung wegen Unklarheit (Ich habe die Frage bearbeitet). sage ich habe ein Array mit 10 Zahlen von 1 bis 10 und ich habe zum Beispiel die '2' und '5' Nummern fehlen. Kannst du bitte ein Beispiel geben? – Nimrod

+0

dieses Beispiel ist großartig! Ich mache keine Kleinigkeit. Du hast erwähnt, dass "alles auf O (n) läuft" - aber ich verstehe nicht warum. Zuerst sollten Sie über das Array und berechnen, wie oft jede Zahl erscheint, die bereits O (n) ist, dann, wenn Sie fertig sind, sollten Sie gehen und finden Sie die "Löcher", die ein anderes O (n) ist, oder? So kamen wir zu O (n)^2. und wenn wir es sortieren wollen, ist es ein anderes O (n). Habe ich falsch verstanden? – Nimrod

+0

Fast korrekt, aber O (n) + O (n) ist immer noch O (n), also erhalten wir O (n) + O (n) + O (n), was zu O (n) summiert. – Henry

Verwandte Themen