【每天学习一点算法 2026/03/29】搜索二维矩阵 II

每天学习一点算法 2026/03/29

题目:搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。

每列的元素从上到下升序排列。

  1. 最容易想到办法就是遍历矩阵,我们可以调整一下遍历条件,但是极端情况还是 O(mn) 时间复杂度

    typescript 复制代码
    function searchMatrix(matrix: number[][], target: number): boolean {
      let maxRow = matrix.length
      let maxCol = matrix[0].length
      for (let i = 0; i < maxRow; i++) {
        for (let j = 0; j < maxCol; j++) {
          if (matrix[i][j] === target) {
            return true
          }
          if (matrix[i][j] > target) {
            // 根据遍历结果不断缩小行的边界
            if (j === 0) return false
            maxCol = j
          }
        } 
      }
      return false
    };
  2. 每一行否是递增的数组,我们可以用二分法去在每行查找目标。

    typescript 复制代码
    function searchMatrix(matrix: number[][], target: number): boolean {
      let maxRow = matrix.length
      function helper (nums: number[]) {
        let left = 0, right = nums.length
        while (left <= right) {
          const mid = Math.floor((left + right) / 2)
          if (nums[mid] == target) return true
          if (nums[mid] > target) right = mid - 1
          else left = mid + 1
        }
        return false
      }
      for (let i = 0; i < maxRow; i++) {
         const isFind = helper(matrix[i])
         if (isFind) return true
      }
      return false
    };
  3. 我们其实可以发现每次遍历我们都可以缩小行的边界,那么我们可以从 [0, n - 1] 处开始遍历,如果 matrix[i][j] 大于 目标值,那么就 j--,否则 i++,直到碰到边界还没找到,就是没有目标值

    typescript 复制代码
    function searchMatrix(matrix: number[][], target: number): boolean {
      let i = 0
      let j = matrix[0].length - 1
      while (i < matrix.length && j >= 0) {
        if (matrix[i][j] === target) return true
        if (matrix[i][j] > target) {
          j--
        } else {
          i++
        }
      }
      return false
    };

题目来源:力扣(LeetCode)

相关推荐
Jack202 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树3 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE21219 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21219 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术1 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050731 天前
(一)小红的数组操作
算法·编程语言
怕浪猫1 天前
Electron 系列文章封面图
算法·架构·前端框架
徐小夕1 天前
JitWord 3.0 正式发布,高精度Word异构解析+复杂组件兼容,打造web端协同Word编辑器
前端·vue.js·算法