在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如:
下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字1,则返回true;如果查找数字5,则返回false。
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
遍历二维数组:
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
第一种方法:
直接让目标值和二维数组里面的每一个值进行比较
public boolean Find(int [][] array,int target) {
for(int i = 0;i < array.length;i++){
for(int j = 0;j < array[i].length;j++){
if(array[i][j] == target){
return true;
}
}
}
return false;
}
第二种方法:
1、首先,我们选择查找数字6为例一步步进行分析
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
2、然后,我们选取数组右上角的4
由于4小于6,下一次只需在4的下边区域查找。
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
3、7大于6,下一次只需在7的左边区域查找
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
4、4小于6,下一次只需在4的下边区域查找。
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
5、7大于6,下一次只需在7的左边区域查找
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
6、4小于6,下一次只需在4的下边区域查找
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
7、7大于6,下一次只需在7的左边区域查找
1 2 3 4
2 3 4 7
3 4 7 8
6 7 8 9
public boolean Find(int[][] array, int target) {
int rows = array.length; // 总行数
int cloumns = array[0].length; // 第一行总列数
int row = 0;
int cloumn = cloumns - 1;
boolean flag = false;
if (array != null && rows > 0) {
while (rows > row && cloumn >= 0) {
if (array[row][cloumn] > target) {
cloumn--;
} else if (array[row][cloumn] < target) {
row++;
} else {
flag = true;
break;
}
}
}
return flag;
}