Recentemente, recebi esta pergunta da entrevista e estou curioso para saber qual seria uma boa solução para isso.
Digamos que eu receba uma matriz 2d em que todos os números na matriz estão em ordem crescente da esquerda para a direita e de cima para baixo.
Qual é a melhor maneira de pesquisar e determinar se um número de destino está na matriz?
Agora, minha primeira inclinação é utilizar uma pesquisa binária, já que meus dados são classificados. Posso determinar se um número está em uma única linha no tempo O (log N). No entanto, são as 2 direções que me confundem.
Outra solução que acho que pode funcionar é começar em algum lugar no meio. Se o valor do meio for menor que meu objetivo, posso ter certeza de que ele está na parte quadrada esquerda da matriz a partir do meio. Eu então me movo diagonalmente e verifico novamente, reduzindo o tamanho do quadrado em que o alvo poderia estar, até que eu tenha focado no número alvo.
Alguém tem boas idéias para resolver esse problema?
Matriz de exemplo:
Ordenado da esquerda para a direita, de cima para baixo.
1 2 4 5 6
2 3 5 7 8
4 6 8 9 10
5 8 9 10 11
[[1 1][1 1]]
:?