📜  搜索二维矩阵 - Java (1)

📅  最后修改于: 2023-12-03 15:39:51.993000             🧑  作者: Mango

搜索二维矩阵 - Java

在二维矩阵中搜索特定的目标值是一个常见的问题。在这个问题中,给定一个二维矩阵,其中每行都按照升序排序,每列也按照升序排序。现在要求我们查找目标值是否存在于矩阵中。

本文将介绍一个使用 Java 语言实现搜索二维矩阵的算法。

算法描述

首先,我们可以将这个二维矩阵的每一行看作一个有序数组。这样,整个二维矩阵就变成了一个由一些有序数组组成的集合。根据每个数组的特点,可以使用二分查找的方法在每个数组中查找目标值。

具体算法如下:

  1. 初始化 rowcol 为矩阵的行数和列数。
  2. 初始化遍历的起点为矩阵的右上角(第一行的最后一列)。
  3. 如果当前值等于目标值,则查找成功,返回 true
  4. 如果当前值大于目标值,则向左移动一列。
  5. 如果当前值小于目标值,则向下移动一行。
  6. 如果移动后仍然在矩阵内部,则返回步骤 3。
  7. 如果移动后跑出了矩阵内部,则查找失败,返回 false
代码实现

下面是 Java 语言实现搜索二维矩阵的完整代码:

public boolean searchMatrix(int[][] matrix, int target) {
    int row = matrix.length;
    int col = row > 0 ? matrix[0].length : 0;

    // 初始化遍历的起点为矩阵的右上角
    int i = 0;
    int j = col - 1;

    while (i < row && j >= 0) {
        int val = matrix[i][j];

        if (val == target) {
            // 如果当前值等于目标值,则查找成功,返回 true
            return true;
        } else if (val < target) {
            // 如果当前值小于目标值,则向下移动一行
            i++;
        } else {
            // 如果当前值大于目标值,则向左移动一列
            j--;
        }
    }

    // 如果移动后跑出了矩阵内部,则查找失败,返回 false。
    return false;
}
总结

通过将二维矩阵拆分成若干个有序数组,使用二分查找的方法来搜索目标值,可以提高查询效率,降低时间复杂度。在实际的开发中,可以根据具体情况选择合适的算法和数据结构,使代码更加高效。