当前位置: 首页 > news >正文

【Hot 100 刷题计划】 LeetCode 240. 搜索二维矩阵 II | C++ 巧妙利用单调性 (BST 法)

LeetCode 240. 搜索二维矩阵 II

📌 题目描述

题目级别:中等

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

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

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

  • 示例 1:
    输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]],target = 5
    输出:true


💡 破题思路:站在右上角,把矩阵看作二叉搜索树 (BST)

这道题虽然行和列都是单调递增的,但上一行的末尾不一定小于下一行的开头,因此整体不具备绝对的一维单调性,无法直接套用全局二分查找。

破局点在于选择“正确的起跑线”!
如果我们在左上角起跑,往右是变大,往下也是变大,一旦当前值小于目标值,我们根本不知道该往右走还是往下走。

但如果我们站在矩阵的右上角,奇妙的物理性质出现了:

  • 向左走:同一行中,左边的元素一定比当前
  • 向下走:同一列中,下边的元素一定比当前

这不就是一棵**二叉搜索树(BST)**吗!当前元素就是根节点,左边的行就是左子树,下边的列就是右子树。

核心运作机制:

  1. 从右上角(0, n-1)开始搜寻。
  2. 如果当前值 == target,直接找到,返回true
  3. 如果当前值 > target,说明目标值不可能在当前列的下方,我们应该向左移动(剔除当前列),即j--
  4. 如果当前值 < target,说明目标值不可能在当前行的左方,我们应该向下移动(剔除当前行),即i++
  5. 当越界时说明矩阵中不存在该目标值,返回false

💻 C++ 代码实现 (极简贪心法)

classSolution{public:boolsearchMatrix(vector<vector<int>>&matrix,inttarget){intm=matrix.size();if(m==0)returnfalse;intn=matrix[0].size();// 将起点设置在矩阵的右上角inti=0,j=n-1;// 只要没有越过矩阵的左边界和下边界,就继续搜索while(i<m&&j>=0){if(matrix[i][j]==target){returntrue;// 命中靶心}if(matrix[i][j]>target){j--;// 当前值太大了,往左走寻找更小的值}else{i++;// 当前值太小了,往下走寻找更大的值}}// 走出矩阵也没找到,说明不存在returnfalse;}};
http://www.jsqmd.com/news/614208/

相关文章:

  • AI写文+自动发布实现方法,自媒体矩阵新玩法
  • OpCore-Simplify:智能配置效率工具如何重塑黑苹果安装体验
  • 2026最新盘点:十大高清壁纸图片素材网站与背景图片素材网站推荐 - 品牌2025
  • YOLO-Master 与 YOLO 开始嫡
  • 我做的丐版 Claude Code 代码已开源
  • 题解:P16208 [ECUSTPC 2025] 金色走廊
  • OpenClaw 2026.3.31 版本授权报错/执行被拒问题排查与解决
  • Product Hunt 每日热榜 | 2026-04-09
  • RimSort:智能模组管理工具解决RimWorld加载冲突与性能优化指南
  • CSSCI论文写作10:质化研究方法
  • 如何选择精密电子产品用排针排母厂家?2026年专业选购指南 - 品牌策略主理人
  • 隐写术工具技术指南:从原理到实践的完整探索
  • 如何突破NCM格式限制?ncmdumpGUI让音乐自由播放的完整方案
  • 3分钟掌握Windows安卓应用安装神器:APK-Installer终极指南
  • GoCodingInMyWay嘶
  • 5步快速解锁网易云音乐NCM文件:ncmdumpGUI完整使用指南
  • 快速体验AI绘画:雯雯的后宫-造相Z-Image-瑜伽女孩镜像部署教程
  • 二分查找力扣题(leetcode)浇
  • 双迹美业系统软件开发(现成案例)
  • 零基础鸿蒙应用开发第三十一节:await简化异步编程与Promise进阶并发
  • 题解:P16209 [ECUSTPC 2025] 眼见为实
  • 周鸿祎西安交大演讲:AI时代青年的机遇与挑战
  • 颠覆级游戏串流解决方案:Sunshine全场景应用指南
  • 【LLM实战之舆情监测与分析】01_舆情监测是什么
  • CodeMagicianT滦
  • 如何通过Java存储过程执行OS命令_Runtime.getRuntime().exec的封装与安全限制
  • 为什么基于位置的块分割在 RAG 中会导致性能不佳?
  • P15230 【LCOI R1 T2】Trees Transform
  • 苹果SSD方法:解锁大模型代码生成能力的简单之道
  • 柔性抓取革命:OpenHand开源机械手的技术突破与产业价值