题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
源代码:
解法一:
public class Solution {
public boolean Find(int target, int [][] array) {
int i,j;
int xlen=array.length;//对于二维数组,求横坐标的长度
int ylen=array[0].length;//对于二维数组,求纵坐标的长度,应该注意。
boolean flag=false;
for(i=0,j=ylen-1;i<xlen&&j>=0;){
if(target<array[i][j]){
j--;
}else if(target>array[i][j]){
i++;
}else{
flag=true;break;
}
}
return flag;
}
}
解题思路:
1、从第一行的最后一个元素开始,如果要查找的元素比该元素小,则横坐标减1,若比当前元素大,则纵坐标加1;若相等,则说明存在,返回存在。
2、时间复杂度应该是O(xlen+ylen)。
解法二:
public class Solution {
public boolean Find(int target, int [][] array) {
int i,j;
int xlen=array[0].length, ylen=array.length;
boolean flag=false;
for(i=0;i<ylen;i++){
int low=0,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;
}
}