题目leetcode240. Search a 2D Matrix II
难度等级:medium
思路
实现对每一行的二分查找,和每一列的二分查找就可以了
时间复杂度
O(mlgn)
实现
class Solution {
public:
bool bin(vector<vector<int>>& matrix, int axis, int index, int l, int r, int target) {
// row scan
if(axis == 0){
int mid;
while(l < r) {
mid = l + ((r - l) >> 1);
if (matrix[index][mid] < target)
l = mid + 1;
else
r = mid;
}
return (matrix[index][l] == target) ? true : false;
} else {
int mid;
while(l < r) {
mid = l + ((r - l) >> 1);
if(matrix[mid][index] < target)
l = mid + 1;
else
r = mid;
}
return (matrix[l][index] == target) ? true : false;
}
}
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty()) return false;
int m, n;
m = matrix.size();
n = matrix[0].size();
if(m < n) {
for(int i = 0; i < m; i++) {
if(bin(matrix, 0, i, 0, n -1, target))
return true;
}
return false;
} else {
for(int i = 0; i < n; i++) {
if(bin(matrix, 1, i, 0, m - 1, target))
return true;
}
return false;
}
}
};