74. 搜索二维矩阵

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


给你一个满足下述两条属性的 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;
}
}