返回轨道
算法 · 2026-05-14 · 28 阅读

P7 行列递增的二维数组搜索

算法 28 阅读

信号摘要

难度:Medium · 时长:04:10 · leetcode 240 · lintcode 38

P7 行列递增的二维数组搜索

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你一个二维数组 matrix,和一个目标值 target。你要在数组里找到这个目标值,然后返回它的行/列下标。如果找不到,则返回 [-1,-1]。

这个数组的每一行都是从左向右递增,每一列都是从上到下递增。和「二维数组的二分搜索」不同,这道题目并不保证每一行的第一个数都比上一行的最后一个数要大。

比如说,给你的二维数组是:

1, 3, 5 2, 4, 6

给你的目标值是 4。目标值 4 在这个数组中,找到后返回它的下标 [1, 1] 即可。

如果给你的目标值是 100,显然它不在这个二维数组中,你要返回 [-1,-1]。

代码

public class AlgoCasts {

  // Time: O(m+n), Space: O(1)
  public int[] searchIn2DArray(int[][] matrix, int target) {
    if (matrix == null || matrix.length == 0 ||
      matrix[0] == null || matrix[0].length == 0)
      return new int[]{-1, -1};

    int m = matrix.length, n = matrix[0].length;
    int i = 0, j = n - 1;
    while (i < m && j >= 0) {
      if (target < matrix[i][j]) --j;
      else if (target > matrix[i][j]) ++i;
      else return new int[]{i, j};
    }
    return new int[]{-1, -1};
  }

}

📡 通讯频道