题目
代码(首刷看解析)
一开始用两层遍历,时间超了
看的解析说从左下角或者右上角开始,大了或者小了移动一个方向就可以了
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) { // 从右上角或者左下角开始
int m = matrix.size(), n = matrix[0].size();
int i = m-1, j = 0;
while(i >= 0 && j < n) {
if(matrix[i][j] == target)
return true;
if(matrix[i][j] > target) {
i--;
} else {
j++;
}
}
return false;
}
};
代码(7.20 二刷自解)
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size(), n = matrix[0].size();
int row = m - 1, column = 0;
while(row >= 0 && column < n) {
if(matrix[row][column] == target)
return true;
else if(matrix[row][column] < target)
column++;
else row--;
}
return false;
}
};
代码(9.16 三刷自解)
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size(), n = matrix[0].size();
int i = m-1, j = 0;
while(i >= 0 && j < n) {
if(matrix[i][j] < target) {
j++;
} else if(matrix[i][j] > target) {
i--;
} else {
return true;
}
}
return false;
}
};