二维数组中的查找

时间:2022-10-25 00:25:03

题目来自剑指offer,如下图所示。

二维数组中的查找

下图是解法。

 1 package com.jeaven;
 2 import java.util.Scanner;
 3 
 4 /*在二维数组中查找数字*/
 5 public class Problem4 {
 6     public static void main(String[] args) {
 7         int num = 0; //待查找的数字
 8         int row = 0;  //数组行数
 9         int col = 0;   //数组列数
10         Scanner reader = new Scanner(System.in);
11         System.out.println("请输入数组的行数:");
12         if(reader.hasNextInt()) {
13             row = reader.nextInt();
14         }
15         System.out.println("请输入数组的列数:");
16         if(reader.hasNextInt()) {
17             col = reader.nextInt();
18         }
19         int[][] arr = new int[row][col]; //初始化数组
20         for(int i = 0; i < row; i++) {
21 
22             System.out.println("请输入第 " + (i+1) + " 行的数");
23             for(int j = 0; j < col; j++) {
24                 if(reader.hasNextInt()) {
25                     arr[i][j] = reader.nextInt();
26                 }
27             }
28         }
29         System.out.println("请输入需要查找的数字: ");
30         if(reader.hasNextInt()) {  //输入一个等待查找的数字
31             num = reader.nextInt();
32         }
33         new Problem4_Solution1().solve(arr, num);
34     }
35 }
36 
37 
38 /*解法:从数组的左下角或者右上角开始查找,下面从左下角开始查找
39 *依次缩小搜索范围,小于当前的数则减少下面一行,大于则减少左边一列
40 *注意:如果数组中有重复数字,那从左下角开始查找,只能查找距离左下角元素最近的那个数字。
41 */
42 class Problem4_Solution1 {
43     public boolean solve(int[][] arr, int num) {
44         int row = arr.length; //获得二维数组的行数
45         int col = arr[0].length; //获得二维数组的列数
46         int find_row = row - 1;
47         int find_col = 0;
48         while((find_row >= 0) && (find_col <= col-1)) {
49             if(arr[find_row][find_col] == num) {
50                 System.out.println("find it successfully...");
51                 System.out.println("查找数字是数组的第 " + (find_row+1) + " 行,第 "+ (find_col+1) +" 列");
52                 return true;
53             } else if(arr[find_row][find_col] > num){
54                 find_row -= 1;
55             } else {
56                 find_col += 1;
57             }
58         }
59 
60         return false;
61     }
62 }

下面这个是结果图。从问题图中那个4x4的二维矩阵中查找出数字7。

二维数组中的查找