LeetCode 刷题 [C++] 第240题.搜索二维矩阵 II

题目描述

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

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

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

题目分析

  1. 通过分析矩阵的特点发现,其左下角和右上角可以看作一个"二叉搜索树的根节点",一侧分支元素更小,另一侧分支元素更大;
  2. 因此,可以通过对比根节点与target的大小,动态更新根节点(调整矩阵的下和左边界或者上/右边界),来找出target.
  3. 以左下角元素为"根节点"为例进行分析:
    如果左下角元素大于target,则target一定在左下角元素所在行的上方,此时,更新矩阵的下边界;
    如果左下角元素小于target,则target一定在该元素所在列的右方,此时,更新矩阵的左边界;
    当左下角元素等于target时,找到目标值,返回true;
    当左下角元素的行索引或者列索引越界时,表示没有找到目标,返回false。

Code

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if (matrix.empty()) {
            return false;
        }
        int row = matrix.size() - 1, col = 0;
        while (row >= 0 && col < matrix[0].size()) {
            if (matrix[row][col] == target) {
                return true;
            } else if (matrix[row][col] > target) {
                --row;
            } else {
                ++col;
            }
        }
        return false;
    }
};
相关推荐
编程小白20266 分钟前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
我是咸鱼不闲呀6 分钟前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划
.小墨迹43 分钟前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
仟濹1 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
历程里程碑1 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴1 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6731 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy87874752 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春2 小时前
C++之继承的方式
c++·private·public·protected·继承方式