题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
从题意我们可以知道最小数是第一行第一个,最大数是最后一行的最后一个,每一行最大的一个数是每一行的最后一个,每一行最小一个数是每一行的第一个。
所以我们从第一行的最后一个数开始比较假定这个值为 temp,如果目标值 target 大于 temp,那么与下一行的数值进行比较,因为下一行的值比上一行的值大;如果目标值 target 小于 temp,那么与前一列的数值进行比较,因为前一列的值比后一列的值小。如此循环直到找到这个数返回 true,或者所有的数都被查找过返回 false。
代码实现
import java.util.Scanner;
public class Problem1 {
public static boolean Find(int target, int [][] array) {
if(array == null){
return false;
}
int n = array.length;
int m = array[0].length;
int i = 0;
int j = m - 1;
while(i < n && j >= 0){
int temp = array[i][j];
if(target < temp){
j--;
}
else if(target > temp){
i++;
}
else{
return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int[][] array = new int[2][2];
for (int i = 0; i < 2; i ++) {
for (int j = 0; j < 2; j ++) {
array[i][j] = cin.nextInt();
}
}
int target = cin.nextInt();
System.out.println(Find(target, array));
}
}