先列二分法,再行二分法

    1. class Solution {
    2. public:
    3. bool searchMatrix(vector<vector<int>>& matrix, int target) {
    4. if(!matrix.size() || !matrix[0].size()) return false;
    5. int rmin = 0, rmax = matrix.size() - 1;
    6. while(rmin < rmax)
    7. {
    8. int mid = (rmin + rmax + 1) >> 1;
    9. if(target < matrix[mid][0])
    10. rmax = mid - 1;
    11. else
    12. rmin = mid;
    13. }
    14. // cout << "rmin: "<< rmin << endl;
    15. if(target < matrix[rmin][0]) return false;
    16. int cmin = 0, cmax = matrix[0].size() - 1;
    17. while(cmin < cmax)
    18. {
    19. int mid = (cmin + cmax) >> 1;
    20. // cout << "cmin & cmax & mid: " << cmin << " " << cmax << " " << mid << endl;
    21. if(matrix[rmin][mid] < target)
    22. cmin = mid + 1;
    23. else
    24. cmax = mid;
    25. }
    26. // cout << "cmax: " << cmax << endl;
    27. if(matrix[rmin][cmin] != target) return false;
    28. return true;
    29. }
    30. };