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;
    }
};
相关推荐
见过夏天1 小时前
C++ 基础入门完全指南
c++
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境2 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境2 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
To_OC3 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
To_OC3 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
郝学胜_神的一滴3 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake