1.问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
2.思路:只看题目本身,可能不是这么直观(如果一眼就能得出规律的.....我觉得没有看下去的必要了....),
首先我们可以自己来一个符合题目条件的二维数组,用来寻找规律:
从图上可以很容易的看出来:在数组中,无论是哪一个数,它总是比右边的数小(或等于),总是比上面的数大。其实题目本身就是想告诉我们这个。
除了上述之外,我们还需要知道: 对于 int[][] a = {{}},得出 a.length = 1 以及 a[0].length = 0 ; 对于 int[][] a = {},得出 a.length = 0 以及 a[0].lenght = 0。这是用来判断是否有必要查找。
3.代码:
public boolean find(int target, int [][] array) { //1.判断行和列的长度 if(array.length == 0 || array[0].length == 0){ return false; } //2.获取行和列的长度 int rowLen = array.length; int colLen = array[0].length; //3.开始遍历查找,从左下角开始查找,大于指定的整数:上移,小于指定的整数:下移 for(int i = rowLen-1,j = 0; i >= 0 && j < colLen ; ){ if(array[i][j] == target){ return true; }else if(array[i][j] > target){ i--; }else{ j++; } } //4.最后说明没有找到 return false; }