搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。
这个矩阵具有以下特性:
- 每行中的整数从左到右是排序的。
- 每行的第一个数大于上一行的最后一个整数。
class Solution {
public:/**
* @param matrix, a list of lists of integers
* @param target, an integer
* @return a boolean, indicate whether matrix contains target
*/
int searchcol(vector<vector<int> > &matrix,int target,int m){
int col=-1;
int first,last;
int mid;
first=0;
last=m-1;
while(first<=last){
mid=(first+last)/2;
if(matrix[mid][0]>target){
last=mid-1;
}
if(matrix[mid][0]<=target){
first=mid+1;
}
}
return col=last;
}
bool searchrow(vector<vector<int> > &matrix,int target,int n,int col){
int row;
int first,last;
int mid;
first=0;
last=n-1;
while(first<=last){
mid=(first+last)/2;
// cout<<mid<<endl;
if(matrix[col][mid]>target){
last=mid-1;
}
else if(matrix[col][mid]<target){
first=mid+1;
}
else if(matrix[col][mid]==target)
return true;
}
return false;
}
bool searchMatrix(vector<vector<int> > &matrix, int target) {
// write your code here
if(matrix.empty()==true)
return false;
int m,n;
int col;
m=matrix.size();
n=matrix[0].size();
// cout<<m<<" "<<n<<endl;
col=searchcol(matrix,target,m);
// cout<<col<<endl;
if(col==-1||matrix[col][0]>target)
return false;
else
return searchrow(matrix,target,n,col);
}
};
本文介绍了一个高效的算法,用于搜索一个具有特殊性质的二维矩阵中的特定值。该算法首先通过二分查找确定目标值可能所在的列,然后在该列中再次使用二分查找确定目标值是否存在。
441

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



