题意:
给你一个二位数组,对于每行,元素是递增的,对于每列,元素是递增的,让你从中查找某个值。
思路:
如果从左上角开始查找,那么不匹配时,下个查找位置是不确定的,因为右边和下边都大于该值,同理右下角也不能作为查找起点。
所以可以从左下角开始查找,当目标值大于该值,说明目标值永远不可能存在于该列,所以下一个查找位置为列数+1;如果目标值小于该值,说明目标值永远不可能在该行,所以下一个查找位置为行数-1;
java代码:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int r = matrix.length;
if(r==0){
return false;
}
int c = matrix[0].length;
if(c==0){
return false;
}
int i = r-1;int j = 0;
while(i>=0&&j<c){
if(matrix[i][j]==target){
return true;
}
if(target>matrix[i][j]){
j++;
}
else{
i--;
}
}
return false;
}
}
同理,从右上角开始查也是可行的,时间复杂度同样为O(r+c);