74.搜索二维矩阵

目录

题目

给你一个满足下述两条属性的 m x n 整数矩阵:

每行中的整数从左到右按非严格递增顺序排列。

每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

解法

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>> matrix, int target) {
        auto row = upper_bound(matrix.begin(), matrix.end(), target, [](const int b, const vector<int> &a) {
            return b < a[0];
        });
        if (row == matrix.begin()) {
            return false;
        }
        --row;
        return binary_search(row->begin(), row->end(), target);
    }
};

演示upper_bound比较的过程

好的,让我们通过一个具体的例子来演示 upper_bound 的比较过程。

示例矩阵

假设我们有以下的二维矩阵 matrix 和目标值 target

cpp 复制代码
vector<vector<int>> matrix = {
    {1, 3, 5},
    {7, 10, 11},
    {12, 14, 16},
    {20, 22, 24}
};
int target = 9;

upper_bound 的使用

在这个例子中,我们要找到 target(9)在 matrix 中的可能位置。我们使用 upper_bound

cpp 复制代码
auto row = upper_bound(matrix.begin(), matrix.end(), target, [](const int b, const vector<int> &a) {
    return b < a[0];
});

比较过程

  • matrix.begin() 指向第一行 {1, 3, 5},第一个元素是 1
  • matrix.end() 指向超出最后一行的迭代器,表示没有更多行。
比较步骤
  1. 第一轮比较

    • b = 9a = {1, 3, 5}
    • 判断 9 < 1,结果为 false
    • 因为 falseupper_bound 继续检查下一行。
  2. 第二轮比较

    • b = 9a = {7, 10, 11}
    • 判断 9 < 7,结果为 false
    • 继续检查下一行。
  3. 第三轮比较

    • b = 9a = {12, 14, 16}
    • 判断 9 < 12,结果为 true
    • 此时,upper_bound 找到了第一个大于 9 的行,因此返回该行的迭代器。

结果

  • row 现在指向 {12, 14, 16} 这一行的开始位置。
  • 然后我们执行 --row,将其移动到 {7, 10, 11} 这一行。
  • 最后在 {7, 10, 11} 这一行使用 binary_search 查找 target(9)。

总结

在这个例子中,upper_bound 找到的是第一个大于 9 的行({12, 14, 16}),而在实际查找中,我们确定 9 可能在 {7, 10, 11} 这一行中。通过这种方式,upper_bound 允许我们快速定位目标值可能出现的行。希望这个例子能帮助你理解 upper_bound 的比较过程!

相关推荐
CoovallyAIHub5 小时前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub6 小时前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub6 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub6 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub7 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞7 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕8 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub9 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone77399 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试