题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
算法解析
- 一个从左到右,从上到下递增的二维数组,我们可以从数组的左下角或者右上角开始遍历,这样当我们将target与遍历的元素做比较后(以左下角为例),如果比target小,我们可以向右遍历,如果比target大,我们可以向上遍历。
- 对于有序数组我们可以采用二分法的方式查找,我们可以首先查找一个横列上的区间[a, b], a < target && b > target,然后在这些竖列上二分查找target,当然算法好像有些复杂。
代码如下:
public class Solution {
public boolean Find(int target, int [][] array) {
if(array == null){
return false;
}
if(array.length == 0 || array[0].length == 0){
return false;
}
if(target < array[0][0]){
return false;
}
int i = array.length - 1;
int j = 0;
while(i >= 0 && j < array[array.length - 1].length){
if(target == array[i][j]){
return true;
}else if(target > array[i][j]){
j ++;
}else{
i --;
}
}
return false;
}
}