面试题3:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路分析
根据题干,提取主要元素:
二维数组
行:从左到右递增
列:从上到下递增
可以得出特点:行列都是有序的。
思路一:从右上角作为起始点进行大小比对,然后一层层排除,减小比对范围。由于行列都是有序的,因此,每次可以减小一行或者一列的所有值,直到最终定位到要查找的值,或者所有行列都排除在外,确定不含要查找的值。
思路二:从左下角比对起。
这里只给出思路一的答案。
public static boolean Find(int target, int [][] array) {
if(array != null && array.length > 0) {
int N = array.length;
int row = 0;
int col = array[0].length - 1;
while(row < N && col >= 0) {
if(target < array[row][col]){
col --;
} else if(target > array[row][col]){
row ++;
}else {
return true;
}
}
}
return false;
}
