LeetCode热题100 搜索二维矩阵

题目描述

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

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

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

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

示例 1:

输入 :matrix = \[1,3,5,7,10,11,16,20,23,30,34,60], target = 3
输出 :true

示例 2:

输入 :matrix = \[1,3,5,7,10,11,16,20,23,30,34,60], target = 13
输出 :false

提示:

m == matrix.length

n == matrixi.length

1 <= m, n <= 100
−104<=matrixij,target<=104-10^4 <= matrixij, target <= 10^4−104<=matrixij,target<=104

思路

进行两次二分查找模板,第一次二分查找获取所在行,第二次二分查找获取所在列。

代码

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        // 找到所在行的下一行
        vector<vector<int>>::iterator row = upper_bound(matrix.begin(), matrix.end(), target, [](const int a, const vector<int> &b)
        {
            return a < b[0];   
        });
        // 所在行的下一行是第0行, 说明元素不存在
        if(row == matrix.begin())
        {
            return false;
        }
        // 找到所在行
        --row;
        // 对所在行进行二分查找
        return binary_search(row->begin(), row->end(), target);
    }
};
相关推荐
Selvaggia5 分钟前
Diffusion Model 的基本原理与模型架构
算法
汉克老师1 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6661 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin031 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
shehuiyuelaiyuehao2 小时前
算法50,分治归并,数组中的逆序对
java·算法
风合星语3 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
阳明山水3 小时前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
91刘仁德3 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
雨落在了我的手上3 小时前
Java数据结构(十四):Map和Set
数据结构
码行山野赴时序归途3 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表