题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二维数组(每行每列都递增排序):
1 | 2 | 8 | 9 |
---|---|---|---|
2 | 4 | 9 | 12 |
4 | 7 | 10 | 13 |
6 | 8 | 11 | 15 |
思路:
- 右上角思路:
如果数字比array[row][column]小,那它肯定比当前列的数字都小
因此,column--
如果数字比array[row][column]大,那它肯定比当前行的数字大
因此,row++ - 左下角思路:
如果数字比array[row][column]小,那它肯定比当前行的数字都小
因此,row--
如果数字比array[row][column]大,那它肯定比当前lie的数字大
因此,column++
//右上角是数组中最大的数字。
public static boolean Find(int target, int [][] array) {
int row = 0;
int column = array.length-1;
while (column >= 0 && row < array[0].length) {
if (array[row][column] > target) {
column--;
} else if (array[row][column] < target) {
row++;
} else {
return true;
}
}
return false;
}
//左下角是数组中最小的数字。
public static boolean Find2(int target, int [][] array) {
int row = array.length-1;
int column = 0;
while (row >= 0 && column < array[0].length) {
if (array[row][column] > target) {
row--;
} else if (array[row][column] < target) {
column++;
} else {
return true;
}
}
return false;
}