题目
参考资料
https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/comments/238066
思路要点
我一开始是想从左上角走,比target大就,退一步,然后向下走,下面以右上角为起点感觉更好
然后写代码的时候,有个测试用例是[] ,需要判断矩阵为空,可以用vector.begin()==vector.end()判断
从右上角开始走,利用这个顺序关系可以在O(m+n)的复杂度下解决这个题:
如果当前位置元素比target小,则row++
如果当前位置元素比target大,则col–
如果相等,返回true
如果越界了还没找到,说明不存在,返回false
代码
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.begin()==matrix.end()) return false;
int r=matrix.size();
int c=matrix[0].size();
int index_r=0;
int index_c=c-1;
while(index_r<r&&index_c>=0){
if(matrix[index_r][index_c]>target){
index_c--;
}
else if(matrix[index_r][index_c]<target){
index_r++;
}
else return true;
}
return false;
}
};