规律排列的二位数组中的查找优化
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路一
将二维数组看成矩阵,从矩阵的右上角开始查找。
如果target(要查找的数)等于右上角,则return true
;如果target(要查找的数)小于右上角,则剔除该列;如果target(要查找的数)大于右上角,则剔除该行;
重复上述步骤,把要查找的范围逐步缩小。
如果矩阵是n阶方阵,查找次数小于2n
解决方案一
|
|
思路二
观察到,矩阵的主对角线是递增的。
遍历主对角线上的数,需要n次
如果主对角线上的数大于target(要找的数),用二分查找去确定当前行、当前列是否包含target,如果找到,直接return true
;否则,继续遍历,直到遍历完主对角线
解决方案二
|
|
小结
- 把握数据的内在规律,优化代码
- 熟练使用
java.util.Collections
的API,简化我们的代码 - 如果有能力,掌握
java.util.Collections
中的算法