方法1:坐标轴法,和二叉树搜索差不多
时间复杂度O(n+m),空间复杂度O(1)
将初始temp设为左下角点,row=n-1,col=0
temp=matrix[i][j],
如果temp>target,那么temp位置要向上移,row–
如果temp<target,那么temp位置要向右移,col++
否则就剩下temp==target,返回true
循环退出的条件就是边界条件 row>=0 && col<m
需要注意的是 如果matrix为空,在对m赋值时,由于访问不到matrix[0]会导致程序报错,所以要先对matrix.size()进行判断
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.size()==0) //必须在赋值n,m前判断,否则会报错
return false;
int n=matrix.size();
int m=matrix[0].size();//要在前面加一个如果矩阵size为0的检查,因为访问不到matrix[0]会报错
int row=n-1;
int col=0;
int temp=0;
while(row>=0 && col<m){
temp=matrix[row][col];
if(target>temp)
col++;
else if(target<temp)
row--;
else
return true;
}
return false;
}
};
方法二:暴力搜索,逐行二分