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;
    }
};
相关推荐
loser~曹15 分钟前
基于快速排序解决 leetcode hot215 查找数组中第k大的数字
数据结构·算法·leetcode
Dream it possible!21 分钟前
LeetCode 热题 100_打家劫舍(83_198_中等_C++)(动态规划)
c++·算法·leetcode·动态规划
zhouziyi070126 分钟前
【蓝桥杯14天冲刺课题单】Day 8
c++·算法·蓝桥杯
SylviaW0830 分钟前
python-leetcode 62.搜索插入位置
数据结构·算法·leetcode
愚润求学1 小时前
【C++】vector常用方法总结
开发语言·c++·vector
赤秀2 小时前
C++模板初阶
开发语言·c++
半桔2 小时前
红黑树剖析
c语言·开发语言·数据结构·c++·后端·算法
江烽渔火2 小时前
C++ 多态
开发语言·c++
今天_也很困2 小时前
牛客2025年愚人节比赛
c++·算法
嘤国大力士2 小时前
C++11&QT复习 (十)
java·c++·qt