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);
    }
};
相关推荐
2401_831920742 小时前
C++与Qt图形开发
开发语言·c++·算法
GIS阵地2 小时前
Warning 1: PROJ: proj_create_from_database
数据库·c++·mybatis·qgis·开源gis·pyqgis
Shining05962 小时前
AI 编译器系列(四)《AI 编译器中的后端优化》
linux·服务器·人工智能·线性代数·算法·triton·ai编译器
良木生香2 小时前
【C++初阶】:C++入门相关知识(3):引用 & inline内联函数 & nullptr相关概念
开发语言·c++
西野.xuan2 小时前
【一篇即毕业系列】C++的volatile关键字从基础到通天。
java·jvm·c++
小则又沐风a2 小时前
第一章:C++入门基础--- c++入门门槛高? 逐步剖析c++语法 成为c++大师
开发语言·c++
像污秽一样2 小时前
算法设计与分析-习题8.1
数据结构·算法·dfs·dp
飞天狗1112 小时前
最小生成树算法
算法
H_老邪2 小时前
贪心算法的应用
算法·ios·贪心算法