Vor kurzem wurde mir diese Interviewfrage gestellt und ich bin gespannt, was für eine gute Lösung das wäre.
Angenommen, ich erhalte ein 2D-Array, in dem alle Zahlen im Array von links nach rechts und von oben nach unten in aufsteigender Reihenfolge aufgeführt sind.
Was ist der beste Weg, um zu suchen und festzustellen, ob sich eine Zielnummer im Array befindet?
Meine erste Neigung besteht nun darin, eine binäre Suche zu verwenden, da meine Daten sortiert sind. Ich kann in O (log N) feststellen, ob sich eine Zahl in einer einzelnen Zeile befindet. Es sind jedoch die 2 Richtungen, die mich abschrecken.
Eine andere Lösung, von der ich dachte, dass sie funktionieren könnte, besteht darin, irgendwo in der Mitte zu beginnen. Wenn der Mittelwert kleiner als mein Ziel ist, kann ich sicher sein, dass er sich im linken quadratischen Teil der Matrix von der Mitte befindet. Ich bewege mich dann diagonal und überprüfe erneut, wobei ich die Größe des Quadrats reduziere, in dem sich das Ziel möglicherweise befinden könnte, bis ich die Zielnummer verfeinert habe.
Hat jemand gute Ideen zur Lösung dieses Problems?
Beispielarray:
Von links nach rechts, von oben nach unten sortiert.
1 2 4 5 6
2 3 5 7 8
4 6 8 9 10
5 8 9 10 11
[[1 1][1 1]]
?