二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:因为每一列每一行都是递增的,我们会很容易发现每一阶右上角的值都是中间值,我们只需要和这个中间值比较就可以缩小查找范围,比如:
1 3 5 7 9
2 4 6 8 10
3 5 7 9 11
我们可以看到9是3阶矩阵右上角的值,它是当前行的最大值,是当前列的最小值。如果目标值比9大,我们就可以排除这一行,如果比9小,我们可以排除这一列,然后不断地缩小范围就可以找到目标值了。
代码:
public boolean Find(int target, int [][] array) {
if(array.length == 0 || array[0].length == 0) {
return false;
}
int col = array.length-1;//代表向下
int row = 0;//代表往左
while(row <= array.length-1 && col >= 0){
if(array[row][col] == target){
return true;
}else if(array[row][col] < target){
row += 1;
}else{
col -= 1;
}
}
return false;
}
时间复杂度:O(n)