/*思想就是二分查找法,先找到可能所在的行,然后在这行中再运用二分查找,一种特殊情况就是最小数字比查找值大的情况*/
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if (matrix.empty()|| matrix[0].empty())
return false;
if(matrix[0][0]>target)//最小数字比查找值大的情况
return false;
int up = 0;
int down = matrix.size() - 1;
int flag = 0;
while (up <= down)
{
flag = (up + down) / 2;
if (matrix[flag][0] == target)
return true;
else if (matrix[flag][0] < target)
up = flag+1;
else
down = flag-1;
}
int left = 0;
int right = matrix[down].size() - 1;
while (left <= right)
{
flag = (left + right) / 2;
if (matrix[down][flag] == target)
return true;
else if (matrix[down][flag] < target)
left = flag+1;
else
right = flag-1;
}
return false;
}
};