74. 搜索二维矩阵

发布于 2024-06-08  16 次阅读


给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3

输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13

输出:false

犯了个很离谱的错误,初版代码

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int row = 0;
        int col = matrix[0].length - 1;
        while(col >= 0 && row < matrix.length){
            if(matrix[row][col] == target){
                return true;
            }
            if(matrix[row][col] < target){
                ++row;
            }
            if(matrix[row][col] > target){
               --col;
            }
        }
        return false;
    }
}

判断target时使用了2个if,导致row + 1,在矩阵只有一个元素时,超出边界。正确写法:

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int row = matrix.length;
        int col = matrix[0].length - 1;
        while(col >= 0 && row < m){
            if(matrix[row][col] == target){
                return true;
            }
            if(matrix[row][col] < target){
                ++row;
            }else{
               --col;
            }
        }
        return false;
    }
}