如图所示有一个二维数组,要在其中查找一个数组number,如果找到返回true,否则返回false;
该二维数组每行和每列中的数字都是递增的。
解题思路是,先从最右上角的数字开始找起。
如果该数字刚好等于要查找的数字,则返回true。
如果该数字大于要查找的数字,因为每列数字都是递增的,该数字在这一列已经是最小的,所以最右边那列数字不再可能包含要查找的数字,所以排除这一列,往左一列查找。
如果该数字小于要查找的数字,因为每行数字都是递增的,该数字在这一行已经是最大的,所以这一行不再可能包含要查找的数字,所以排除这一行,从下一行找起。
根据这个思路,java实现的算法如下所示:
public class Array_Find {
public static void main(String[] args) {
int a[][]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.out.println(new Array_Find().Find(a, 10));
System.out.println(new Array_Find().Find(a, 100));
}
boolean Find(int [][]a,int number){
int x=a.length;//获得二维数组的行数
int y=a[0].length;//获得二维数组的列数
boolean result=false;
if(a!=null&&x>0&y>0){
int xx=0;
int yy=y-1;
while(xx<x&&yy>=0){
if(a[xx][yy]==number){
result=true;break;
}
else if(a[xx][yy]>number){
yy-=1;
}
else if(a[xx][yy]<number){
xx+=1;
}
}
}
return result;
}
}
运算结果:
true
false