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

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

在二维矩阵中搜索 - Java

在二维矩阵中搜索指定的元素是否存在,如果存在返回其所在的位置,否则返回-1。本文将介绍如何使用Java实现该算法。

思路

一般情况下,我们在二维矩阵中搜索元素的思路是从左上角或者右下角开始查找,逐步缩小搜索范围。

以从左上角开始查找为例,具体思路如下:

  • 如果目标元素等于矩阵的左上角元素,则直接返回左上角的位置。
  • 如果目标元素小于矩阵的左上角元素,则说明目标元素可能在矩阵的左边或者上边,于是可以将搜索范围缩小到矩阵左侧或者上侧的子矩阵中继续搜索。
  • 如果目标元素大于矩阵的左上角元素,则说明目标元素可能在矩阵的右边或者下边,于是可以将搜索范围缩小到矩阵右侧或者下侧的子矩阵中继续搜索。

对于从右下角开始查找,也有类似的思路。

代码
public class MatrixSearch {
    public static int searchMatrix(int[][] matrix, int target) {
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return -1;
        }
        int rows = matrix.length;
        int cols = matrix[0].length;
        int row = 0;
        int col = cols - 1;
        while (row < rows && col >= 0) {
            if (matrix[row][col] == target) {
                return row * cols + col;
            } else if (matrix[row][col] > target) {
                col--;
            } else {
                row++;
            }
        }
        return -1;
    }
}

该算法时间复杂度为$O(m+n)$,其中$m$和$n$分别为矩阵的行数和列数。