题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
首先将这个二维数组看做是一个矩阵,考虑这么一个思路,首先在矩阵中选取一个数,如果要查找的数大于这个数,那么该数应该在选取数字的下方或者右方,如果该数小于选取的数,那么这个数应该在选取数字的上方或者左方,无论怎样,查找的数都会在选取位置的两个区域都出现,并且这两个区域有重叠的部分,这使得问题较为复杂,
现在不妨换一种思路,我们从右上角开始进行查找,如果查找的数比右上角的数小,那么该数只可能在左方,如果查找的数比右上角大,那么该数只可能在下方,查找的数都只会在一个区域出现,要么在左方,要么在下方,每一次查找都会使得查找的区域变小,下面以查找数字5为例
代码如下
public class Test {public static boolean findInMatrix(int[][] matrix, int number) {boolean found = false;// 获得矩阵的行数和列数int rows = matrix.length;int columns = matrix[0].length;if (matrix != null && rows > 0 && columns > 0) {// 从右上角开始查找int row = 0;int column = columns - 1;// 继续查找的条件while (row < rows && columns >= 0) {if (matrix[row][column] == number) {// 找到退出while循环found = true;break;} else if (matrix[row][column] > number) {// 比右上角小 在左方column--;} else {// 否则比右上角大 在下方row++;}}}return found;}public static void main(String[] args) {int[][] matrix = {{1, 2, 3}, {2, 4, 6}, {3, 6, 9}};boolean found = findInMatrix(matrix, 2);System.out.println(found);}}
