题目:在一个二维数组中,每一行都按照从左到有递增的顺序排序,每一列都是从上往下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。
当我拿到这个题的时候,第一反应是循环,挨个判断不就可以了,看了后面的解析才知道,看来是我太low了。
看看正确的吧,逐步缩小查找范围:
public class TwoDimArry {
public static void main(String[] args) {
int ayys[][]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.err.println(findNumber(ayys,4,4,10));
}
private static boolean findNumber(int[][] array, int rows, int colums, int num) {
boolean isExit = false;
if (array != null && rows > 0 && colums > 0) {
int row = 0;
int colum = colums - 1;
while (row < rows && colum >= 0) {
if (array[row][colum] == num) {
isExit = true;
break;
} else if (array[row][colum] < num) {
row++;
}else if(array[row][colum] >num) {
colum--;
}
}
}
return isExit;
}
}
整体的思路是先取右上角的最大数,如果比这个数大,那么下一步应该去该数的这一列寻找,比这个数小应该去前一行的第一个数比较,逐步的缩小范围,防止有重复的数字进行过比较。大多数同学在思考的时候就会忽略while中条件,row < rows && colum >= 0这个条件,一般会想不到,或者不知道怎么写。主要是缺乏整体的思考和对自己查询的不知道操作有关系。