在一个二维数组中,每一行都有着按照从左到右的递增顺序排序,每一列都按照从上到下的顺序递增排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该函数
如数组
int[][] a ={{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}};
方法是按照数组的递增特性,从有上角或者左下角开始,分别和要查找的数num比较;
如从右上角开始, 如果num=a[i][j],则返回true
如果num>a[i][j],则去掉该行,因为该行所有数都会小于num;---即行增加1(i++)
否则,num<a[i][j],去掉该列,因为该列所有数都大于num;----即列减少1(j--)
这样就能缩小查找的范围
代码如下:
private static boolean find(int[][] a, int num) {
// TODO Auto-generated method stub
int row =a.length-1;
int column=a.length-1;
int i = 0,j = column;
if((num<a[0][0])||(num>a[row][column])){
return false;
}else{
while(i<=row&&j>=0){
if(a[i][j]==num){
return true;
}else if(num>a[i][j]){
i++;
}else{
j--;
}
}
}
return false;
}