LeetCode 2D Matrix
class Solution {
public:
int search_row(vector<vector<int>>& matrix,int target,int l,int r,int m)
{
if(l>r)
return -1;
if(l==r)
{
if(l==0)
return l;
else
return (l-1);
}
int mid=(l+r)/2;
if(matrix[mid][0]==target)
return mid;
if(mid-1>=0 && matrix[mid-1][0]<=target && matrix[mid][0]>target)
return (mid-1);
if(mid+1<m && matrix[mid][0]<target && matrix[mid+1][0]>=target)
{
if(matrix[mid+1][0]==target)
return (mid+1);
else
return mid;
}
if(target<matrix[mid][0])
return search_row(matrix,target,l,mid-1,m);
else
return search_row(matrix,target,mid+1,r,m);
}
bool binary_search(vector<vector<int>>& matrix, int target,int row,int l,int r){
if(l>r)
return false;
int mid=(l+r)/2;
if(target==matrix[row][mid])
return true;
if(target<matrix[row][mid])
return binary_search(matrix,target,row,l,mid-1);
else
return binary_search(matrix,target,row,mid+1,r);
}
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m=matrix.size();
if(m==0)
return false;
int n=matrix[0].size();
if(n==0)
return false;
int row=search_row(matrix,target,0,m,m);
if(row==-1)
return false;
if(matrix[row][0]==target)
return true;
return binary_search(matrix,target,row,0,n);
}
};
No comments:
Post a Comment