Menu
CoddyTech

Search a 2D Matrix

Você recebe uma grade de números inteiros matrix com m linhas e n colunas, e um número inteiro target. Cada linha está ordenada em ordem crescente, e o primeiro valor de cada linha é maior que o último valor da linha acima. Retorne true se target aparecer na grade e false caso contrário, em tempo O(log(m × n)).

Função

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
a grade, fornecida como uma lista de linhas, ordenadas linha por linha
targetinteger
o valor a ser procurado
Retornaboolean
verdadeiro se o alvo estiver na grade, falso caso contrário

Restrições

  • 1 ≤ m, n ≤ 100, onde m = matrix.length e n = matrix[i].length
  • Cada linha tem o mesmo comprimento n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Cada linha está ordenada em ordem estritamente crescente, e o primeiro valor de cada linha é maior que o último valor da linha anterior.

Exemplos

Entrada
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Saída
true
Explicação
Lidos linha por linha, os 12 valores formam uma única lista ordenada. Uma busca binária nas posições de 0 a 11 verifica 21 na posição 5 (pequeno demais), 33 na posição 8 (grande demais) e, em seguida, encontra 26 na posição 6.
challenge icon

Para ir além

Suponha que as linhas possam ter comprimentos diferentes, mas ainda estejam ordenadas de ponta a ponta. Como você converteria uma posição em uma linha e uma coluna, e qual seria o custo da busca?

Redefinir código
def searchMatrix(matrix, target):
    # Escreva o código aqui

Teste #1

Teste #2

Argumentos

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

Saída Esperada

true