题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:二维数组具有的特性,每个一维数组等长,左到右递增,上到下递增,
相当于可以构建一个矩阵:
1,2, 3,4
5,6,7,8
9,10,11,12
懒得画图。。
所以在找值的时候我们可以利用两个中间值,左下或者右上来进行比较,这两个值存在一个特性,在一列中最大一行中最小,或者一行中最大一列中最小的。
解题采用了左下,如果查找一个数N,首先跟9进行比较,如果比9大则右移,比9小则上移。代码如下:
public class Solution {
public boolean Find(int target, int [][] array) {
int i = 0;
int j = array.length-1;
int max = array[0].length;
//条件范围
while( i < max && j >= 0){
//相等返回
if(array[j][i] == target){
return true;
//小于上移
}else if(array[j][i] > target){
j--;
}else{
//大于右移
i++;
}
}
return false;
}
}