题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class NewCode1 {
//solution1:把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案
public static boolean Find(int [][] array,int target) {
for(int i=0;i<array.length;i++){
int low=0;
int high=array[i].length-1;
while(low<=high){
int mid=(low+high)/2;
if(target>array[i][mid])
low=mid+1;
else if(target<array[i][mid])
high=mid-1;
else
return true;
}
}
return false;
}
//solution2:左下角开始,遇大右移,遇小上移,直到超过边界都没找到,得false。否则得true
public static boolean Find2(int [][] array,int target) {
int row = array.length;
int col = array[0].length;
int x = row - 1, y = 0;
while(x >=0 && y<=col - 1){
if(target < array[x][y]){
x--;
}else if(target > array[x][y]){
y++;
}else {
return true;
}
}
return false;
}
}