文章目录
题目描述
法一)二分查找
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m=matrix.size(), n=matrix[0].size();
for(int i=0;i<m;i++){
int l=0, r=n-1;
while(l<r){
int mid=(l+r+1) >> 1;
if(matrix[i][mid] <= target) l=mid;
else r=mid-1;
}
if(matrix[i][r] == target) return true;
}
return false;
}
};
//另一种写法
class Solution{
public:
bool searchMatrix(vector<vector<int>>& matrix, int target){
int n=matrix[0].size();
for (const auto& row : matrix){ //const auto& 表示只读取matrix中的元素,不修改
int l=0, r=n-1;
while(l<r){
int mid=(l+r+1) >> 1;
if(row[mid]<=target) l=mid;
else r=mid-1;
}
if(row[r]==target) return true;
}
return false;
}
};
复杂度
法二)抽象二叉搜索树BST
class Solution{
public:
bool searchMatrix(vector<vector<int>>& matrix, int target){
int m=matrix.size(), n=matrix[0].size();
for (int i=0, j=n-1;i<m & j>=0;){
if(matrix[i][j]==target) return true;
else if(matrix[i][j]>target) j--;
else i++;
}
return false;
}
};
复杂度
法三)直接查找
class Solution{
public:
bool searchMatrix(vector<vector<int>>& matrix, int target){
for (const auto& row : matrix){
for (int col : row){
if(col == target) return true;
}
}
return false;
}
};
复杂度