1. 题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
2. 算法思想
假设数组 array 如下:
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
- 我们可以发现当我们选取右上角的元素 9 作为第一次的比较时,若目标值大于 9 时,则向下查找,反之,则向左遍历。(左下角也可以选取)
- 则当目标值大于 右上角 9 时,让行(row +1)。若小于 9 时,则让(column - 1) 循环条件为 row < 数组行数 && column >= 0 。
- 在循环中判断是否 array[row][column] 等于目标值。若等于,则return true。当出循环之后,说明在数组中没有找到目标值,则最后一行return false
- 若传入了一个空数组,则直接返回false
3. 算法实现(Java)
public class Solution {
public boolean Find(int target, int [][] array) {
if(array[0].length == 0){
return false;
}
int row = 0;
int column = array[0].length-1;
while(row < array.length && column >= 0){
if(array[row][column] == target){
return true;
}else if(array[row][column] > target){
column--;
}else{
row++;
}
}
return false;
}
}