剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
1 | [ |
给定 target = 5
,返回 true
。
给定 target = 20
,返回 false
。
限制:
1 | 0 <= n <= 1000 |
解法1:暴力双循环
略
解法2:按行二分查找
1 | public boolean findNumberIn2DArray(int[][] matrix, int target) { |
解法3:线性搜索
由于二维数组按行按列递增,所以对于在二维数组中的每个元素都有如下性质
- 该元素上边的元素都比他小
- 该元素右边的元素都比他大
所以可以从数组左下角开始搜索
- 如果当前数字大于target则向上搜索
- 如果当前数字小于target则向右搜索
- 如果查找到该元素则返回
- 如果数组越界,则返回false
1 | public boolean Find(int target, int [][] array) { |