Menu
CoddyTech

Search a 2D Matrix

Se te proporciona una cuadrícula de enteros matrix con m filas y n columnas, y un entero target. Cada fila está ordenada de forma creciente, y el primer valor de cada fila es mayor que el último valor de la fila anterior. Devuelve true si target aparece en la cuadrícula y false en caso contrario, en tiempo O(log(m × n)).

Función

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
la cuadrícula, dada como una lista de filas, ordenadas fila por fila
targetinteger
el valor que se debe buscar
Devuelveboolean
true si el objetivo está en la cuadrícula, false en caso contrario

Restricciones

  • 1 ≤ m, n ≤ 100, donde m = matrix.length y n = matrix[i].length
  • Cada fila tiene la misma longitud n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Cada fila está ordenada en orden estrictamente creciente, y el primer valor de cada fila es mayor que el último valor de la fila anterior.

Ejemplos

Entrada
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Salida
true
Explicación
Leídos fila por fila, los 12 valores forman una lista ordenada. Una búsqueda binaria en las posiciones de 0 a 11 comprueba 21 en la posición 5 (demasiado pequeño), 33 en la posición 8 (demasiado grande) y después encuentra 26 en la posición 6.
challenge icon

Para ir más allá

Supongamos que las filas pudieran tener longitudes diferentes y aun así estuvieran ordenadas de principio a fin. ¿Cómo convertirías una posición en una fila y una columna, y cuál sería el costo de búsqueda?

Restablecer código
def searchMatrix(matrix, target):
    # Escribe el código aquí

Prueba #1

Prueba #2

Argumentos

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

Salida Esperada

true