Java二维数组查找功能代码实现

下面来详细讲解如何用Java实现二维数组查找功能的代码。

算法思路

二维数组(也叫矩阵)是由若干个一维数组组成的数据结构,我们可以将其看成一个具有行列特性的表格。要实现查找功能,我们可以从左上角(或者右下角)开始逐行逐列地查找,找到目标数就返回 true,否则返回 false。

具体实现步骤如下:

  1. 从左上角开始查找,设当前位置为 (i, j),若该位置的值 a[i][j] 大于目标数,则直接返回 false。
  2. 若该位置的值小于目标数,则往右查找,即令 j++,继续判断 a[i][j] 的值。
  3. 如果在某一行中找到了目标数,则返回 true。
  4. 如果往右到达了最后一列仍未找到目标数,就往下查找,即令 i++,继续从该行的第一个位置开始查找。
  5. 重复第二、三、四步,直到找到目标数或遍历完整个矩阵。

代码实现

下面是 Java 语言实现二维数组查找功能的代码示例:

public boolean searchMatrix(int[][] matrix, int target) {
    if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
        return false;
    }
    int m = matrix.length, n = matrix[0].length;
    int i = 0, j = n - 1;  // 从矩阵右上角开始查找
    while (i < m && j >= 0) {
        if (matrix[i][j] == target) {
            return true;
        } else if (matrix[i][j] > target) {
            j--;  // 当前值比目标值大,向左移动
        } else {
            i++;  // 当前值比目标值小,向下移动
        }
    }
    return false;  // 没有找到目标值
}

这个方法的时间复杂度是 $O(m+n)$,其中 $m$ 和 $n$ 是矩阵的行数和列数,空间复杂度是常数级别,只需要几个辅助变量。

接下来,我们来看两个具体的应用场景:

示例 1:在二维矩阵中查找目标数

假如现在有一个二维矩阵如下:

  1  3  5  7
 10 11 16 20
 23 30 34 60

我们需要在这个矩阵中查找一个目标数,比如 16

我们可以按照上述代码实现过程,从矩阵右上角开始查找,即 (i, j) = (0, 3) 开始查找,根据二维数组查找的规则,如果比目标数大就向左移动,如果比目标数小就向下移动,直到找到目标数或者遍历完整个矩阵。

代码实现如下:

int[][] matrix = {
        {1, 3, 5, 7},
        {10, 11, 16, 20},
        {23, 30, 34, 60}
};
int target = 16;
boolean isFound = searchMatrix(matrix, target);
System.out.println(isFound);  // true

运行结果为 true,表示已经找到了目标数。

示例 2:判断二维数组中是否包含某一行

假设现在有一个 $m \times n$ 的二维矩阵 matrix,我们需要判断其中是否包含某一行 row

我们可以按照行来遍历这个二维矩阵,对于每一行都按照上述算法来查找目标数,如果找到了就说明包含该行。

代码实现如下:

int[][] matrix = {
        {1, 3, 5, 7},
        {8, 10, 11, 16},
        {23, 30, 34, 60}
};
int m = matrix.length, n = matrix[0].length;
int[] row = {8, 10, 11, 16};
boolean isFound = false;
for (int i = 0; i < m && !isFound; i++) {
    if (matrix[i][0] <= row[0] && matrix[i][n - 1] >= row[n - 1]) {
        // 假设该行是升序的
        isFound = searchMatrix(matrix, row, i);
    }
}
System.out.println(isFound);  // true

这里需要定义一个 searchMatrix() 方法,用来查找一行是否相等:

private static boolean searchMatrix(int[][] matrix, int[] row, int i) {
    int n = matrix[0].length, j = 0;
    while (j < n && matrix[i][j] == row[j]) {
        j++;
    }
    return j == n;
}

运行结果为 true,表示该二维矩阵包含了目标行。

总结

以上就是 Java 实现二维矩阵查找功能的完整攻略,核心思路就是从右上角开始查找,找到就返回 true,没找到就继续往左或者往下查找。代码实现不难,但是需要注意细节,比如空指针判断,边界条件等。在实际应用中,可以根据具体需求来调整算法实现的细节和逻辑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java二维数组查找功能代码实现 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • JavaEE中用response向客户端输出中文数据乱码问题分析

    JavaEE中用Response向客户端输出中文数据时,由于编码方式的不同,可能会出现乱码问题。下面是解决该问题的完整攻略。 问题分析 出现中文乱码的原因是由于Java和浏览器显示中文时采用的编码方式不同。Java默认使用UTF-8编码,而浏览器则存在多种编码方式,如GB2312、GBK、UTF-8等。在Response输出响应的过程中,需要将Java编码方…

    Java 2023年5月20日
    00
  • SpringMVC 传日期参数到后台的实例讲解

    在 Spring MVC 中,我们可以使用多种方式来传递日期参数到后台,包括使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接口等。本文将详细讲解 Spring MVC 如何传递日期参数到后台,包括如何使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接…

    Java 2023年5月18日
    00
  • Bootstrap Table 搜索框和查询功能

    Bootstrap Table 是一款基于Bootstrap的响应式表格插件,可以快速创建漂亮、强大的表格,并提供了丰富的配置选项和API接口。 搜索框和查询功能是Bootstrap Table的重要特性之一,可以帮助用户快速定位和过滤所需数据。下面是搜索框和查询功能的完整攻略: 1. 搜索框 搜索框是Bootstrap Table的常用特性之一,可以帮助用…

    Java 2023年6月16日
    00
  • AJAX SpringBoot 前后端数据交互的项目实现

    理解和实现AJAX SpringBoot前后端数据交互,需要涉及到以下知识点:SpringBoot、AJAX、RESTAPI和JSON数据格式。 1. 准备工作 首先,搭建一下SpringBoot的项目环境,然后在项目中引入一些必要的依赖,如下: Spring Boot Web Spring Boot Thymeleaf(或者其他视图模板依赖) Spring…

    Java 2023年6月2日
    00
  • JAVA面试题String产生了几个对象

    对于这道Java面试题,我们先来分析一下。 在Java中,String是一个不可变的对象,也就是说一旦创建了一个String对象,它就不能被修改。同时,Java也为了提高程序的运行效率,在处理String对象时使用了String Pool技术。简单来讲,就是Java会尝试复用已经存在的String对象,而不是在每次需要创建新对象时都新建一个对象,这种技术可以…

    Java 2023年5月26日
    00
  • MyBatis-Plus工具使用之EntityWrapper解析

    如何使用 MyBatis-Plus 的 EntityWrapper 来查询数据,以下是详细的攻略: 前置条件 要使用 EntityWrapper,需要先添加 MyBatis-Plus 的依赖,如下: <dependency> <groupId>com.baomidou</groupId> <artifactId&gt…

    Java 2023年5月20日
    00
  • ES6学习笔记之新增数据类型实例解析

    ES6学习笔记之新增数据类型实例解析 前言 ES6是JavaScript语言的一个重要版本,它新增了许多新的特性和语法,让JavaScript变得更加强大和灵活。其中,新增了一些数据类型,让我们能够更加方便地处理数据。本文主要介绍ES6中新增的数据类型及其特点和用法。 新增数据类型 Symbol Symbol是ES6新增的一种基本数据类型,表示独一无二的值。…

    Java 2023年5月26日
    00
  • Gson中@JsonAdater注解的几种方式总结

    当我们使用Gson将Java对象序列化成JSON字符串或者JSON字符串反序列化成Java对象的时候,我们需要做一些特殊的处理,例如处理JSON字符串中的日期格式、处理JSON字符串中的空值、处理JSON字符串中特定字段的命名等等。Gson提供了@JsonAdapter注解来满足这些需求,它可以对序列化和反序列化过程中的数据进行自定义转换,下面我们来详细介绍…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部