Wie suche ich nach einer Zahl in einem 2d-Array sortiert von links nach rechts und von oben nach unten?

War ich kürzlich dieses interview Frage und ich bin gespannt, was eine gute Lösung wäre.

Sagen, dass ich ein 2d array, wo alle
zahlen im array werden in steigender
Reihenfolge von Links nach rechts und von oben nach
unten.

Was ist der beste Weg zu suchen und zu
bestimmen, ob eine target-Zahl ist in die
array?

Nun, meine erste Neigung ist die Verwendung einer binären Suche, da meine Daten sortiert. Ich kann bestimmen, ob eine Zahl in einer einzigen Zeile in O(log N) Zeit. Allerdings ist es die 2 Richtungen, die werfen mich Weg.

Andere Lösung dachte ich kann die Arbeit beginnen irgendwo in der Mitte. Wenn der mittlere Wert ist kleiner als mein Gegner, dann kann ich sicher sein, dass es in das linke quadratische Teil der matrix aus der Mitte. Ich habe dann Diagonal ziehen und erneut prüfen, die Verringerung der Größe des Quadrats, das Ziel könnte möglicherweise sein, bis ich geschliffen in auf die Ziel-Nummer.

Hat jemand irgendwelche guten Ideen zur Lösung dieses Problems?

Beispiel-array:

Sortiert von Links nach rechts, oben nach unten.

1  2  4  5  6  
2  3  5  7  8  
4  6  8  9  10  
5  8  9  10 11  
Kommentar zu dem Problem
Einfache Frage: kann es sein, dass Sie haben kann ein Nachbar mit dem gleichen Wert: [[1 1][1 1]] ? Kommentarautor: Matthieu M.

InformationsquelleAutor der Frage Phukab | 2010-03-16

Schreibe einen Kommentar