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 == matrix[i].length

1 <= m, n <= 100
−104<=matrix[i][j],target<=104-10^4 <= matrix[i][j], target <= 10^4−104<=matrix[i][j],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);
    }
};
相关推荐
熬夜敲代码的猫26 分钟前
教你如何使用set和map
c++·算法
YL200404268 小时前
048路径总和III
数据结构·dfs
z200509308 小时前
每日简单算法题——————跟着卡尔
算法
2601_957787589 小时前
企业级内容矩阵的安全合规体系构建与技术实现
大数据·安全·矩阵
Irissgwe9 小时前
类与对象(三)
开发语言·c++·类和对象·友元
️是789 小时前
信息奥赛一本通—编程启蒙(3395:练68.3 车牌问题)
数据结构·c++·算法
Liangwei Lin9 小时前
LeetCode 118. 杨辉三角
算法·leetcode·职场和发展
计算机安禾10 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
鼠鼠我(‘-ωก̀ )好困10 小时前
leetGPU
算法
雪度娃娃10 小时前
转向现代C++——优先选用nullptr而不是0和NULL
开发语言·c++