题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
原题来源 牛客网 题1
考虑到二维数组每一行与每一列都是递增的,对于每一行所有元素来说,拿最后一个元素与输入的值进行判断,如果小于输入值,那这一整行就不用判断了。如果大于,那需要对此行元素进行遍历查看,用 二分法
处理单行元素,提高运行效率。
上代码
public boolean Find(int target, int [][] array) {
for(int i=0; i<array.length;i++) {
int[] _arr = array[i];
int pl = _arr.length;
if(_arr[pl-1] < target) {
continue;
}
int lt = 0;
int rt = _arr.length-1;
int mid = (lt+rt)/2;
while (lt<=rt) {
if(target == _arr[mid]) {
return true;
}else if(_arr[mid] < target) {
lt = mid+1;
}else {
rt = mid-1;
}
mid = (lt+rt)/2;
}
}
return false;
}
开心运行一波,结果报错:
数组空没有做判断,😓
加个判断
if(_arr == null || 0==_arr.length) {
return false;
}
好,立马就过了。