思路1:
- 从右上角开始查找,左边的都比它小,下面的都比它大
- 循环遍历,如果比target小,则m++;比target大,则n--;相等就直接return
- 循环退出条件,当m<array.length && n>=0,也就是遍历到左下角
public class Solution {
public boolean Find(int target, int [][] array) {
//m、n初始值,为右上角的横竖坐标
int m=0;
int n=array[0].length-1;
//进入循环,判断条件为到左下角
//如果比target小,则m++;比target大,则n--;相等就直接return true
while(m<array.length && n>=0){
int a=array[m][n];
if(a<target){
m++;
}else if(a>target){
n--;
}else{
return true;
}
}
//循环结束,说明不存在target,返回false
return false;
}
}
- 时间复杂度:最坏情况是从右上角遍历到左下角,走过的路程是m+n,时间复杂度为O(m+n)
- 空间复杂度:O(1)