原题
思路
看到按一定顺序排序的数据结构,解题肯定需要按某种顺序来寻找。
如果我们从左上到右下这种趋势去寻找,肯定是不好的,因为元素的右侧元素、下侧元素都比元素大,那么该往下走还是往左走,不好判断。
但如果是从右上到左下这种趋势就会明了,如果target<元素,往左走,target>该元素,往下走。
代码
class Solution {
public:
bool findNumberIn2DArray(vector<vector>& matrix, int target) {
if (matrix.size() == 0) return false;
int i= 0, j = matrix[0].size() - 1 , m = matrix.size(), n = matrix[0].size();
while (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 findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if (matrix.size() == 0) return false;
int i= 0, j = matrix[0].size() - 1 , m = matrix.size(), n = matrix[0].size();
while (i < m && j >= 0) {
if(matrix[i][j] == target) return true;
else if (matrix[i][j] > target) j--;
else i++;
}
return false;
}
};
收获
换个角度看问题~