二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题解:
此题可以通过遍历整个二维数组解决但是并不是最优解事件复杂度较高(m*n),我们可以通过二分的方法,将起点定位在左下角或者右上角,设x =代表二维数组的第几列,y代表二维数组的第几行,如果我们将起点定位在左下角则x = 0,y = array.length-1,如果目标整数m小于数组中的当前整数n,则y–,否则x++,这样一次比较可以排除一行或者一列的数据。假如我们要在数组中找到等于9的整数,我们定位在左下角
-
6<9,则x++
-
8<9,x++
-
11>9, y–
-
10 >9,y–
此时我们找到了等于9的数可以返回结果,倘若最终y<0或者x>array[0].length-1,则数组中没有找到该整数
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null || array.length<=0){
return false;
}
int x=0; // 代表第几列
int y = array.length-1; // 代表第几行
while(x<array[0].length && y>=0){
if(array[y][x]>target){
y--;
}else if(array[y][x]<target){
x++;
}else{
return true;
}
}
return false;
}
}