二位数组中的查找
题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
代码展示
public boolean Find(int target, int [][] array) {
int row = 0;
int col = array.length - 1;
if(array[0].length == 0 || array == null || target < array[0][0] || target > array[col][col])
return false;
while(row < array.length && col >= 0){
if(target == array[row][col])
return true;
else if(target > array[row][col])
row++;
else
col--;
}
return false;
}
思路
假设target=7
1.我们可以选取右上角(或左下角)的数与target进行比较
2.9 > 7 --> 该列的数不可能有target --> col--;
3.8 > 7 --> col--;
4.2 < 7 --> 该行不可能存在target --> row++;
5.4 < 7 --> row++;
6.7 = 7 --> return;
图解
注意:不要选取左上角的数与target进行比较,因为即使判断出了–> 1<7 也没有意义,因为在1右边或者下边的数都有可能存在target,并不能排除哪一行或者哪一列