在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
思路一:暴力遍历法进行查找 o(n^2)
思路二:类似于二分查找
已知数组最右上角的元素 nums[i][j]总是大于它左边所有的元素,小于它下面左右的元素;所以从最右的元素进行查找;
如果target>nums[i][j] 向下移动一行,i++
如果target<nums[i][j] 向右移动一行,j–;进行查找
如果查找到。返回true
当遍历完整个数组都没有被查找到,返回false:利用while()循环在数组内部进行查找
注意判断边界条件
public boolean Find(int target, int [][] array) {
if(array==null || array.length==0){
return false;
}
boolean isFind=false;
int row=array.length;
int col=array[0].length;
int i=0,j=col-1;
while(i<row && j>=0){
if(array[i][j] > target){
j--;
}else if(array[i][j] < target){
i++;
}else{
isFind=true;
break;
}
}
return isFind;
}