先列二分法,再行二分法
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;elsermin = 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;elsecmax = mid;}// cout << "cmax: " << cmax << endl;if(matrix[rmin][cmin] != target) return false;return true;}};
