先列二分法,再行二分法
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(!matrix.size() || !matrix[0].size()) return false;
int rmin = 0, rmax = matrix.size() - 1;
while(rmin < rmax)
{
int mid = (rmin + rmax + 1) >> 1;
if(target < matrix[mid][0])
rmax = mid - 1;
else
rmin = mid;
}
// cout << "rmin: "<< rmin << endl;
if(target < matrix[rmin][0]) return false;
int cmin = 0, cmax = matrix[0].size() - 1;
while(cmin < cmax)
{
int mid = (cmin + cmax) >> 1;
// cout << "cmin & cmax & mid: " << cmin << " " << cmax << " " << mid << endl;
if(matrix[rmin][mid] < target)
cmin = mid + 1;
else
cmax = mid;
}
// cout << "cmax: " << cmax << endl;
if(matrix[rmin][cmin] != target) return false;
return true;
}
};