class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
// 二维数组判断空
if (matrix.empty()) return false;
if (matrix[0].empty()) return false;
// 先找出行的范围
// 再从选中的行中依次二分查找
int start = 0;
int end = matrix.size();
while (start < end) {
int mid = (start + end) /2;
if (matrix[mid][0] == target) {
return true;
}
else if (matrix[mid][0] < target ) {
start = mid + 1;
}
else {
end = mid;
}
}
for (int i = 0; i < end; i++) {
// 在新的一轮中进行了更新,之前的东西都不用管了
// 如果找到了, 直接返回, 不然的话循环结束, 直接返回false
int s = 0;
int e = matrix[0].size();
while (s < e) {
int mid = (s+e)/2;
if (matrix[i][mid] == target) {
return true;
}
else if (matrix[i][mid] <= target) {
s = mid +1;
}
else {
e = mid;
}
}
}
return false;
}
};
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
// 二维数组判断空
if (matrix.empty()) return false;
if (matrix[0].empty()) return false;
// 先找出行的范围
// 再从选中的行中依次二分查找
int start = 0;
int end = matrix.size();
while (start < end) {
int mid = (start + end) /2;
if (matrix[mid][0] == target) {
return true;
}
else if (matrix[mid][0] < target ) {
start = mid + 1;
}
else {
end = mid;
}
}
for (int i = 0; i < end; i++) {
// 在新的一轮中进行了更新,之前的东西都不用管了
// 如果找到了, 直接返回, 不然的话循环结束, 直接返回false
int s = 0;
int e = matrix[0].size();
while (s < e) {
int mid = (s+e)/2;
if (matrix[i][mid] == target) {
return true;
}
else if (matrix[i][mid] <= target) {
s = mid +1;
}
else {
e = mid;
}
}
}
return false;
}
};