Menu
CoddyTech

Search a 2D Matrix

MittelBinäre Suchepython iconjava iconcpp iconc iconjs icon+10

Du erhältst ein Gitter aus Ganzzahlen matrix mit m Zeilen und n Spalten sowie eine Ganzzahl target. Jede Zeile ist aufsteigend sortiert, und der erste Wert jeder Zeile ist größer als der letzte Wert der darüberliegenden Zeile. Gib true zurück, wenn target im Gitter vorkommt, andernfalls false, und zwar in O(log(m × n)) Zeit.

Funktion

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
das Raster, als Liste von Zeilen angegeben, zeilenweise sortiert
targetinteger
der zu suchende Wert
Gibt zurückboolean
wahr, wenn sich das Ziel im Raster befindet, andernfalls falsch

Einschränkungen

  • 1 ≤ m, n ≤ 100, wobei m = matrix.length und n = matrix[i].length
  • Jede Zeile hat dieselbe Länge n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Jede Zeile ist streng aufsteigend sortiert, und der erste Wert jeder Zeile ist größer als der letzte Wert der vorherigen Zeile.

Beispiele

Eingabe
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Ausgabe
true
Erklärung
Zeilenweise gelesen bilden die 12 Werte eine sortierte Liste. Bei einer binären Suche über die Positionen 0 bis 11 wird 21 an Position 5 geprüft (zu klein), 33 an Position 8 (zu groß), dann wird 26 an Position 6 gefunden.
challenge icon

Weiterführende Frage

Angenommen, die Zeilen könnten unterschiedlich lang sein und wären trotzdem durchgehend sortiert. Wie würdest du eine Position in eine Zeile und eine Spalte umwandeln, und wie hoch wären die Suchkosten?

Code zurücksetzen
def searchMatrix(matrix, target):
    # Schreibe hier den Code

Test #1

Test #2

Argumente

matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]
target = 26

Erwartete Ausgabe

true