搜索二维矩阵
写出一个高效的算法来搜索 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);
}
};