思路一:二分搜索
选择其中一行进行遍历,然后对列的搜索进行二分搜索法搜索;
或者选择其中一列进行遍历,然后对行的搜索进行二分搜索。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int l=0,r=matrix.length-1;
for(int i=0;i<matrix[0].length;i++){
l=0;
r=matrix.length-1;
while(l<r){
int mid=(l+r)>>1;
if(matrix[mid][i]==target){
return true;
}
else if(matrix[mid][i]<target){
l=mid+1;
}
else{
r=mid-1;
}
}
if(matrix[l][i]==target)
return true;
}
return false;
}
}
思路二:可以将矩阵转化为一个有序的二叉搜索树。其实就是把矩阵逆时针旋转45°看,这样就可以按照二叉搜索树的搜索方法来查询。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int i=0,j=matrix[0].length-1;
while(i!=matrix.length&&j>=0){
if(matrix[i][j]==target){
return true;
}
else if(matrix[i][j]<target){
i++;
}
else{
j--;
}
}
return false;
}
}