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

P38 二维数组的二分搜索

算法 17 阅读

信号摘要

难度:Medium · 时长:05:22 · leetcode 74 · lintcode 28

P38 二维数组的二分搜索

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

描述

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

这个数组的每一行都是递增的,并且每一行的第一个数都比上一行的最后一个数要大。也就是,这个数组可以看成,从左到右、从上到下,呈 Z 字形递增。

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

1, 3, 5 7, 9, 11

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

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

代码

public class AlgoCasts {

  // Time: O(log(m*n)), Space: O(1)
  public int[] binarySearchIn2DArray(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 low = 0, high = m * n - 1;
    while (low <= high) {
      int mid = low + (high - low) / 2;
      int r = mid / n, c = mid % n;
      if (target < matrix[r][c]) high = mid - 1;
      else if (target > matrix[r][c]) low = mid + 1;
      else return new int[]{r, c};
    }
    return new int[]{-1, -1};
  }

}

📡 通讯频道