从右上角往左下角进行查找可以解决这个问题,不过我不想那么做,所以做了两次二分法,先行二分再列二分
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int m = matrix.size();
int left=0,right = 0,mid = 0,row=0;
if(m==0) return false;
int n = matrix[0].size();
if(n==0) return false;
right = m-1;mid = (left+right)/2;
if(target<matrix[0][0]||target>matrix[m-1][n-1]) return false;
while((left!=right-1)&&right!=0){
if(matrix[mid][0]<target){
left = mid;
mid = (left+right)/2;
}
else if(matrix[mid][0]>target){
right = mid;
mid = (left+right)/2;
}
else return true;
}
if(matrix[right][0]==target||matrix[left][0]==target) return true;
if(target>matrix[right][0]) left =right;
row = left;left = 0;right = n-1;mid = (left+right)/2;
while(left!=right-1&&right!=0){
if(matrix[row][mid]<target){
left = mid;
mid = (left+right)/2;
}
else if(matrix[row][mid]>target){
right = mid;
mid = (left+right)/2;
}
else return true;
}
if(matrix[row][right]==target||matrix[row][left]==target) return true;
return false;
}
};
本文介绍了一种使用两次二分查找的方法来在一个按行和列递增排序的二维矩阵中搜索特定目标值的算法。该方法首先在第一列进行二分查找确定目标所在的行,然后在该行进行二分查找确定目标的具体位置。

被折叠的 条评论
为什么被折叠?



