题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
1)该二维数组是递增的,所以左上角的数最小,右下角的数最大
2)可以从右上角或者左下角开始遍历,我这里是从右上角开始
3)如果给定的整数target比右上角的数array[length][0]大,那么target必定在下方,所以往下遍历;
如果target比array[length][0]小,那么target必定在左边,所以往左遍历;
如果相等,直接返回true
代码:
public class Solution {
public boolean Find(int target, int [][] array) {
int length = array.length-1;
int i = 0;
// 从右上角开始遍历
while( (length >= 0) && (i < array[0].length) ){
if( target > array[length][i] ){
// target必定在下方
i++;
}else if( target < array[length][i] ){
// target必定在左边
length--;
}else{
return true;
}
}
return false;
}
}