题意描述:
编写一个高效的算法来搜索 m x n
矩阵 matrix
中的一个目标值 target
。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
暴力解法C++代码如下:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
for(int i = 0; i < matrix.size(); i++){
for(int j = 0; j < matrix[i].size(); j++){
if(matrix[i][j] == target){
return true;
}
}
}
return false;
}
};
但是提交的时候有四个用例超时。时间复杂度为O(m*n)。
再看题中描述:
每一行每一列元素都是由规律可循。
线性搜索的代码如下:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int x = 0;
int y = n - 1;
while(x < m && y >= 0){
if(matrix[x][y] == target){
return true;
}
if(matrix[x][y] > target){
y--;
}
else{
x++;
}
}
return false;
}
};
时间复杂度为O(m+n)。