题目地址
题意:给定二维数组和一个数,保证该二维数组横向和纵向都是严格递增,求其中有没有出现这个数。要求时间复杂度 O(n+m) ,空间复杂度 O(1)。
思路:由于对于矩阵中的任何一个数,其右边的数都比它大,上面的数都比它小,所以我们从矩阵的左下角开始搜索,如果当前数大于给定的数,则往上走,小于就往右走,如果走出矩阵则表示没有。
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int n=(int)array.size();
int m=(int)array[0].size();
int tx=n-1;
int ty=0;
while(tx>=0&&ty>=0&&tx<n&&ty<m)
{
if(target==array[tx][ty]) return true;
if(target>array[tx][ty]) ty++;
else tx--;
}
return false;
}
};