Menu
CoddyTech

Search a 2D Matrix

Vous disposez d’une grille d’entiers matrix comportant m lignes et n colonnes, ainsi que d’un entier target. Chaque ligne est triée par ordre croissant, et la première valeur de chaque ligne est supérieure à la dernière valeur de la ligne au-dessus. Renvoyez true si target apparaît dans la grille et false sinon, en temps O(log(m × n)).

Fonction

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
la grille, donnée sous forme de liste de lignes, triées ligne par ligne
targetinteger
la valeur à rechercher
Renvoieboolean
vrai si la cible se trouve dans la grille, faux sinon

Contraintes

  • 1 ≤ m, n ≤ 100, où m = matrix.length et n = matrix[i].length
  • Chaque ligne a la même longueur n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Chaque ligne est triée par ordre strictement croissant, et la première valeur de chaque ligne est supérieure à la dernière valeur de la ligne précédente.

Exemples

Entrée
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Sortie
true
Explication
Lus ligne par ligne, les 12 valeurs forment une seule liste triée. Une recherche binaire sur les positions de 0 à 11 vérifie 21 à la position 5 (trop petit), 33 à la position 8 (trop grand), puis trouve 26 à la position 6.
challenge icon

Pour aller plus loin

Supposons que les lignes puissent avoir des longueurs différentes, tout en étant triées bout à bout. Comment convertiriez-vous une position en ligne et en colonne, et quel serait le coût de la recherche ?

Réinitialiser le code
def searchMatrix(matrix, target):
    # Écrivez le code ici

Test #1

Test #2

Arguments

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

Résultat attendu

true