题目要求: 在一个二维数组中,每一行都是按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组合一个整数,判断数组中是否含有该整数。
例如: 下面的实际的例子;
例如矩阵
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
求解问题的思路是这样的: 先找规律,当我们需要解决一个复杂的问题的时候,一个很有效的办法就行从一个具体的问题下手,通过分析简单具体的例子,试图寻找普遍的规律。
通过研究,我们发现下面的规律:首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束:如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每一次都在数字的查找范围内剔除一行或者一列。逐步缩小查找范围,一直到找到查找的数字,或者查找范围为空。
代码实现如下:
public class Solution { public boolean Find(int [][] array,int target) { if(array == null) return false; int rowCount = array.length; int colCount = array[0].length; // 从右上角开始比较 int row = 0; int col = colCount - 1; while(row < rowCount && col >= 0) { int val = array[row][col]; if(val < target) row++; else if(val > target) col--; else return true; } return false; } }
参考
剑指offer 何海涛著 电子工业出版社