题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
从题意我们可以知道最小数是第一行第一个,最大数是最后一行的最后一个,每一行最大的一个数是每一行的最后一个,每一行最小一个数是每一行的第一个。
所以我们从第一行的最后一个数开始比较假定这个值为 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));}}
