[Likou] 74. Buscar matriz bidimensional <dicotomía>

【Likou】74. Buscar matriz bidimensional

Dada una matriz mxn de enteros que satisfacen las siguientes dos propiedades:

  • Los números enteros en cada fila están en orden no decreciente de izquierda a derecha.
  • El primer entero de cada fila es mayor que el último entero de la fila anterior.

Dado un objetivo entero, si el objetivo está en la matriz, devuelve verdadero; de lo contrario, devuelve falso.

Ejemplo 1:

1 3 5 7
10 11 dieciséis 20
23 30 34 60

Entrada: matriz = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], objetivo = 3
Salida: verdadero

Ejemplo 2:

1 3 5 7
10 11 dieciséis 20
23 30 34 60

Entrada: matriz = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], objetivo = 13
Salida: falso

提示:
m == matriz.longitud
n == matriz[i].longitud
1 <= m, n <= 100
- 1 0 4 10^41 04 <= matriz[i][j], destino <=1 0 4 10^41 04

respuesta

Mejora de la dicotomía, asignando una matriz bidimensional a una matriz unidimensional para la dicotomía

public class Solution {
    
    
    public boolean searchMatrix(int[][] matrix, int target) {
    
    
        if (matrix == null || matrix.length == 0) {
    
    
            return false;
        }
        int row = matrix.length;
        int col = matrix[0].length;

        int left = 0;
        int right = row * col - 1;

        while (left <= right) {
    
    
            int mid = left + (right - left) / 2;

            // (x,y) --> x*col+y
            //反过来:一维转二维:matrix[mid/col][mid%col]
            int element = matrix[mid / col][mid % col];
            if (element == target) {
    
    
                return true;
            }
            else if (element > target) {
    
    
                right = mid - 1;
            }
            else {
    
    
                left = mid + 1;
            }
        }
        return false;
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_44033208/article/details/131881348
Recomendado
Clasificación