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;
    }
};
相关推荐
_Itachi__11 分钟前
LeetCode 热题 100 74. 搜索二维矩阵
算法·leetcode·矩阵
不忘不弃12 分钟前
计算矩阵A和B的乘积
线性代数·算法·矩阵
不爱写代码的玉子16 分钟前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
虚拟之30 分钟前
36、stringstream
c++
我很好我还能学35 分钟前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
chao_7891 小时前
链表题解——两两交换链表中的节点【LeetCode】
数据结构·python·leetcode·链表
南岩亦凛汀2 小时前
在Linux下使用wxWidgets进行跨平台GUI开发
c++·跨平台·gui·开源框架·工程实战教程
曦月逸霜2 小时前
第34次CCF-CSP认证真题解析(目标300分做法)
数据结构·c++·算法
galaxy_strive2 小时前
绘制饼图详细过程
开发语言·c++·qt