题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:最简单暴力的方法就是遍历二维数组,不过这样肯定在时间上过不了的。。由于这个二维数组是有规律的,一开始可以选择右上角的元素作为cur。如果target是比cur小,就往左走。如果target是比cur大,就往右走。如果出了数组的边界还没找到target,说明不存在。
这里再说一下判断二维数组为空的条件,一开始提交的代码,在传入数组为空的时候一直过不了。我写的判断条件只有一个 array == null,后来看了别人的博客,才知道不止这种情况。
二维数组为空,要检查三个部分:
一是数组首地址是否为空
二是是否为{},也就是array.length==0的情况
三是{{}},这时array.length=1,但是array[0].length==0。满足任意一个条件就可以返回false了。
if(array==null||array.length==0||(array.length==1&&array[0].length==0)) return false;
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null||array.length==0||(array.length==1&&array[0].length==0)){
return false;
}else{
int x = 0;
int y = array[0].length - 1;
int cur = array[x][y];
boolean flag = false;
while(x <= array.length - 1 && y >= 0 ) {
if(target < cur) {
y--;
if(y < 0) {
break;
}
cur = array[x][y];
}
if(target > cur) {
x++;
if(x > array.length - 1) {
break;
}
cur = array[x][y];
}
if(target == cur) {
flag = true;
break;
}
}
return flag;
}
}
}