Menu
CoddyTech

Search a 2D Matrix

Ti viene fornita una griglia di numeri interi matrix con m righe e n colonne e un numero intero target. Ogni riga è ordinata in ordine crescente e il primo valore di ogni riga è maggiore dell’ultimo valore della riga precedente. Restituisci true se target compare nella griglia e false altrimenti, in tempo O(log(m × n)).

Funzione

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
la griglia, fornita come elenco di righe, ordinate riga per riga
targetinteger
il valore da cercare
Restituisceboolean
true se il target è nella griglia, false altrimenti

Vincoli

  • 1 ≤ m, n ≤ 100, dove m = matrix.length e n = matrix[i].length
  • Ogni riga ha la stessa lunghezza n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Ogni riga è ordinata in ordine strettamente crescente e il primo valore di ogni riga è maggiore dell'ultimo valore della riga precedente.

Esempi

Input
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Output
true
Spiegazione
Leggendo riga per riga, i 12 valori formano un'unica lista ordinata. Una ricerca binaria nelle posizioni da 0 a 11 controlla 21 alla posizione 5 (troppo piccolo), 33 alla posizione 8 (troppo grande), poi trova 26 alla posizione 6.
challenge icon

Per approfondire

Supponiamo che le righe possano avere lunghezze diverse, pur essendo ordinate una di seguito all’altra. Come trasformeresti una posizione in una riga e una colonna, e quale sarebbe il costo della ricerca?

Ripristina il codice
def searchMatrix(matrix, target):
    # Scrivi il codice qui

Test #1

Test #2

Argomenti

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

Output atteso

true