【Leetcode】剑指Offer 04. 二维数组中的查找 :利用二分快速查找有序数列

每天一道LeetCode-----在有序的二维数组中查找某个元素 原题链接Search a 2D Matrix判断一个二维数组中是否存在某个值该数组满足 每一行元素按从左到右递增顺序排列 当前行的第一个元素大于上一行的最后一个元素 假设二维数组的维度是m × n考虑二维数组中第0行最后一列的元素matrix[i][j],即i = 0, j = n - 1如果matrix[i][j] == target,那么直接返回就可以。现在考虑不相等的情况,根据数组的排列情况可 阅读详情

看到这道的第一时间就想到了二分,
因为:

  1. 数据的存储形式是数组,可以支持随机访问
  2. 数据有序排列,有内部规律

所以我们利用二分对这个过程进行优化
在这里插入图片描述

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        // 这道题肯定不可暴力遍历,看到有序查找,第一时间用二分。
        // 大致思路是:单行的查找用二分加速
        // 遍历是肯定要遍历的,但是要利用上数组的特点进行加速,比如我们要寻找10,那么第一行定位到下标为3,
        //且不为target,那么我们可以确定的是,目标值一定不在第一行第三列右边的区域
        if (matrix.empty() || matrix[0].empty()) return false;
        int left = 0, right = matrix[0].size() - 1;
        for (int i = 0; i < matrix.size(); i++) {
            int mid = 0;
            if (matrix[i][left] == target || matrix[i][right] == target) return true;
            while(left < right) {
                mid = (left + right + 1) >> 1;
                if (matrix[i][mid] == target) return true;
                if (matrix[i][mid] > target) right = mid - 1;
                else left = mid;
            }
            if(matrix[i][mid] > target && (right = mid - 1) < 0) return false;
            right = mid; left = 0;
        }
        return false;
    }
};
【LeetCode】剑指Offer LeetCode剑指Offer 阅读详情

相关推荐

刷题进阶 -- 剑指Offer、力扣算法题

力扣的刷题计划展览罢了 懒得记录题解了,刷题地址 「剑指 Offer」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 刷题过程中发现动态规划是弱项,找了动态规划的学习计划: 「动态规划」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 以及递归、回溯、BFS、DFS: 「算法」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 发现一个面试小题库: 「高效制胜」 - 学习计划 - 力扣(LeetCode)全...

_天涯__的博客 700

有序数组的最快的查找算法

最近面试问的比较多的一个题目是: 有一个有序的数组,有没有最快的方法查找到里面的一个元素是否存在?存在返回下标,不存在返回-1。 部分人回答用循环,多数人想到用数组的findIndex方法。 很少的人知道这个题是要用二分查找的。 这个题主要是想看一下应聘人员对数据结构和算法有没一下了解。 当然上面三种方式都可以实现这个需求,但是最优解还是二分查找法。 首先,循环和findIndex的是算法复杂度度...

柒月 8735

ADS124S08配置避坑指南:从SPI时序到寄存器设置,手把手教你调通24位ADC

本文详细解析了ADS124S08 24位ADC的SPI时序配置、寄存器设置及外围电路设计中的关键细节,帮助工程师避开常见陷阱。从SPI通信模式选择到DRDY引脚读取优化,再到基准电压启动时间调整,提供了实战验证的解决方案,确保高精度数据采集的稳定性。

weixin_29192365的博客 291

leetcode第74题搜索二维矩阵--二分查找

搜索二维矩阵实际就是二维化的排序数组,因此使用二分查找就能实现(O)log n,做好二维数组索引和数组索引的转换就可以了 class Solution(object): def searchMatrix(self, matrix, target): if target==matrix[0][0]or target==matrix[-1][-1]:return True n=len(matrix[0]) l=0 r=len(matr.

lxhseph的博客 341

数据中心光模块升级实录:从200G QSFP56到400G QSFP-DD的踩坑指南

本文记录了数据中心从200G QSFP56升级至400G QSFP-DD光模块的完整实战经验。文章深入剖析了升级过程中面临的兼容性、链路预算、布线、散热与功耗管理等核心挑战,并提供了具体的解决方案与排坑指南,为高速网络升级提供了宝贵的实践参考。

butter的博客 482

C/C++ LMS算法详解及源码

LMS(Least Mean Squares)算法是一种自适应滤波器算法,用于估计一个系统的参数,以使输出信号与期望信号之间的均方误差最小化。LMS算法通过使用梯度下降的方法,逐步调整自适应滤波器的权值来优化滤波效果。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3279

Python算法——如何在有规律的二维数组中进行高效数据查找

要求: 二维数组每一行按照从左到右递增顺序排列,每一列按照从上到下顺序排列。实现一个函数,输入一个整数判断数组中是否含有该整数。 分析: 最简单的方法就是对二维数组进行顺序遍历,然后判断待查找元素是否在数组中,这种时间复杂度为O(M*N),M,N分别为二维数组行数和列数。 但顺序遍历不是最好的方法,当数组有序的时候,二分查找是一个很好的方法,具体思路如下:给定数...

xjtuse123的博客 1189

基于Simulink的六旋翼无人机动力分配仿真建模示例

六旋翼无人机概述特点:高冗余度、增强的负载能力和更好的故障容忍性。关键组件电机与螺旋桨:提供升力和推力。电调(ESC):控制电机转速。IMU(惯性测量单元):包括加速度计和陀螺仪,用于姿态估计。飞控板:处理传感器数据并生成控制信号。应用场景:航拍摄影、农业监测、物流配送等。仿真目标搭建一个简化的六旋翼无人机动力分配模型,涵盖电机驱动、姿态控制及位置控制过程。分析不同条件下的性能指标(如响应时间、稳定性等),并探讨六旋翼无人机的设计优化。

xiaoheshang_123的博客 485

【Leetcode刷题】二分查找

【Leetcode刷题】二分查找 Leetcode34.在排序数组中查找元素的第一个和最后一个位置 Leetcode35.搜索插入位置 Leetcode69.x的平方根 Leetcode33.搜索旋转排序数组 Leetcode81.搜索旋转排序数组 II Leetcode153.寻找旋转排序数组中的最小值 Leetcode154.寻找旋转排序数组中的最小值 II Leetcode162.寻找峰值 Leetcode74.搜索二维矩阵 Leetcode240.搜索二维矩阵 II

m0_51976564的博客 1392

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直接直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果进行对比,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。

zhaoguanhua的博客 4688

23、视频时间码与数字同步技术详解

本文深入解析了视频时间码与数字同步技术的核心原理及应用。涵盖线性时间码(LTC)和垂直间隔时间码(VITC)的结构与特性,详细阐述了降帧时间码的补偿机制及其在影视制作中的重要性。文章还介绍了定时参考信号(TRS)在SDTV和HDTV中的实现方式,分析了辅助数据的传输结构与发展趋势,并探讨了SDI编码技术及其在不同视频标准下的差异。通过实际应用场景和技术发展影响的剖析,全面展示了这些关键技术如何支撑现代视频系统的高效运行与持续创新。

wine的专栏 241

《剑指Offer》题解汇总索引表(leetcode)

《剑指Offer》题解汇总索引表(leetcode) ???? 文章目录《剑指Offer》题解汇总索引表(leetcode)[【LeetCode】《剑指Offer》第Ⅰ篇⊰⊰⊰ 3 - 11题](https://blog.csdn.net/weixin_44368437/article/details/114194973)[【LeetCode】《剑指Offer》第Ⅱ篇⊰⊰⊰ 12 - 19题](https://blog.csdn.net/weixin_44368437/article/details/114

像写诗一样优雅地写代码~ 2万+

腾讯Android开发面试指南与参考答案

腾讯深圳元宝高级Android开发工程师岗位要求3-5年Android开发经验,熟悉Kotlin和性能优化,具备架构设计能力。岗位职责包括元宝Android客户端研发、稳定性优化及跨团队协作。面试重点考察Kotlin、Jetpack Compose、多线程编程等核心技术,3轮线上面试流程较快。无AI项目经验也可应聘,需突出展示Android架构设计、性能调优等实战能力。建议准备Compose开发、算法等加分项案例。

郑伟强dev的专栏 1137

LeetCode(python):剑指 Offer 04. 二维数组中的查找

LeetCode(python):剑指 Offer 04. 二维数组中的查找 1. 题目:剑指 Offer 04. 二维数组中的查找 2. 题目链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 3. 题目内容 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 4. 输入输出示例

aninstein的博客 205

MFC实现键盘钩子(附完整源码)

MFC实现键盘钩子(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 393

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++描述 LeetCode 剑指 Offer 04. 二维数组中的查找

C++描述 LeetCode 剑指 Offer 04. 二维数组中的查找   大家好,我叫亓官劼(qí guān jié ),在优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,同时正在尝试在B站中做一些内容分享,B站主页为: 亓官劼的B站主页 本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 若需联系博主,可以联系本人微信:qiguanjie2015 在一个 n * m 的二维数组中,每一行

一起加油 809

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

omarchy-on-cachyos能做什么、不能做什么:能力边界与5项前置清单一次讲清

omarchy-on-cachyos 是一个安装脚本,用于把 DHH 的 Omarchy(基于 Hyprland 的“有主见”桌面环境)完整落地到性能优化版 Arch 发行版 CachyOS 之上。它不安装系统、不碰磁盘分区和引导,只负责让两套项目“和睦共处”。这篇文章一次讲清它的**能力边界**,并给出运行前的 **5 项前置清单**,帮你避免踩坑。 ## 30秒看懂:omarchy-on-c

gitblog_00829的博客 379

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【算法-剑指 Offer】04. 二维数组中的查找(数组方法;排序;二分查找)

剑指 Offer 04. 二维数组中的查找 - 力扣(LeetCode) 文章更新:2021年10月12日10:00:53 问题描述及示例 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22],

赖念安的博客 351

leetcode 剑指Offer 04.二维数组中的查找 Java

二维数组中的查找题目链接描述示例初始代码模板代码 题目链接 https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高 效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 限制: 0 <= n <= 1000 0 <= m <= 1000 示例

博主是个二次元死肥宅~ 465

剑指offer04——二维数组中的查找

在一个 n * m的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

weixin_59055853的博客 383

LeetCode剑指offer题目分类汇总及题解

LeetCode剑指offer的分类总结,可以作为刷题指南和题解,方便刷题和汇总

艾醒的博客 1934

剑指Offer04.二维数组中的查找

文章目录剑指Offer04.二维数组中的查找题目描述测试示例解题思路和参考代码代码示例 剑指Offer04.二维数组中的查找 题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof 著作权

CSU_hjh的博客 494

(剑指Offer)面试题03. 数组中重复的数字&面试题04. 二维数组中的查找

剑指Offer面试题03. 04面试题03. 数组中重复的数字面试题04. 二维数组中的查找 面试题03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2...

Chen_programmer的博客 405

【LeetCode刷题(简单程度)】剑指 Offer 04. 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。 给定 targe

qq_33197518的博客 165

剑指offer力扣题集

剑指offer

艺术的博客 944

剑指 Offer 04. 二维数组中的查找

的顺序排序也就是顺序排序却不是递减,那么就是递增观察代码,我们会发现每个元素的下右都是大于他的,而上左都是小于他的。因为如果是左上或者右下开始,数据的两边都是大于或小于原来的值就没办法查找了。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。18比20小向下超出范围,退出查找,返回false。的顺序排序也就是顺序排序却不是递减,那么就是递增。15比20小,向下一位查找。19比20小,向下一位查找。16比20小,向下一位查找。17比20小,向下一位查找。

2201_75352618的博客 422
上一篇: 飞行员兄弟,四种ac代码
下一篇: 【leetcode】剑指offer 26. 树的子结构,利用递归进行匹配
Andy in boots
博客等级 码龄7年 73粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值