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;
}
}
转载请注明原文地址: https://mac.8miu.com/read-495392.html