J'ai récemment reçu cette question d'entrevue et je suis curieux de savoir quelle serait une bonne solution.
Disons qu'on me donne un tableau 2d où tous les nombres du tableau sont dans l'ordre croissant de gauche à droite et de haut en bas.
Quelle est la meilleure façon de rechercher et de déterminer si un numéro cible se trouve dans le tableau?
Maintenant, ma première inclination est d'utiliser une recherche binaire puisque mes données sont triées. Je peux déterminer si un nombre est sur une seule ligne en temps O (log N). Cependant, ce sont les 2 directions qui me déconcertent.
Une autre solution qui, selon moi, pourrait fonctionner est de commencer quelque part au milieu. Si la valeur médiane est inférieure à ma cible, je peux être sûr qu'elle se trouve dans la partie carrée gauche de la matrice à partir du milieu. Je me déplace ensuite en diagonale et vérifie à nouveau, réduisant la taille du carré dans lequel la cible pourrait potentiellement se trouver jusqu'à ce que j'aie affiné le nombre de cible.
Quelqu'un at-il de bonnes idées pour résoudre ce problème?
Exemple de tableau:
Trié de gauche à droite, de haut en bas.
1 2 4 5 6
2 3 5 7 8
4 6 8 9 10
5 8 9 10 11
[[1 1][1 1]]
:?