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;
    }
};
相关推荐
WBluuue33 分钟前
Codeforces 1076 Div3(ABCDEFG)
c++·算法
u01092727144 分钟前
模板编译期排序算法
开发语言·c++·算法
m0_686041611 小时前
C++中的适配器模式变体
开发语言·c++·算法
恒者走天下1 小时前
cpp c++辅导星球价格调整
c++
We་ct1 小时前
LeetCode 36. 有效的数独:Set实现哈希表最优解
前端·算法·leetcode·typescript·散列表
tod1132 小时前
力扣高频 SQL 50 题阶段总结(四)
开发语言·数据库·sql·算法·leetcode
rainbow68892 小时前
VSCode配置C/C++环境全攻略
c++
naruto_lnq2 小时前
C++中的桥接模式
开发语言·c++·算法
j445566112 小时前
C++中的职责链模式高级应用
开发语言·c++·算法
iAkuya2 小时前
(leetcode)力扣100 57电话号码的字母组合(回溯)
算法·leetcode·深度优先