Di recente mi è stata posta questa domanda per l'intervista e sono curioso di sapere quale sarebbe una buona soluzione.
Supponiamo che mi venga fornito un array 2d in cui tutti i numeri nell'array sono in ordine crescente da sinistra a destra e dall'alto verso il basso.
Qual è il modo migliore per cercare e determinare se un numero di destinazione è nella matrice?
Ora, la mia prima inclinazione è quella di utilizzare una ricerca binaria poiché i miei dati sono ordinati. Posso determinare se un numero è in una singola riga nel tempo O (log N). Tuttavia, sono le 2 direzioni che mi sbalordiscono.
Un'altra soluzione che ho pensato potrebbe funzionare è iniziare da qualche parte nel mezzo. Se il valore medio è inferiore al mio obiettivo, posso essere certo che si trova nella parte quadrata sinistra della matrice dal centro. Quindi mi sposto in diagonale e controllo di nuovo, riducendo le dimensioni del quadrato in cui potrebbe trovarsi il bersaglio finché non ho affinato il numero di destinazione.
Qualcuno ha delle buone idee per risolvere questo problema?
Matrice di esempio:
Ordinati da sinistra a destra, dall'alto in basso.
1 2 4 5 6
2 3 5 7 8
4 6 8 9 10
5 8 9 10 11





[[1 1][1 1]]:?