【剑指Offer】面试题3:二维数组中的查找

MT6826SGT-STD-R绝对值编码器深度解析:精准控制+灵活编程 本文详细介绍MT品牌的高性能绝对值编码器——MT6826SGT-STD-R。:区别于传统增量式编码器,绝对值输出无需掉电归零,开机即获准确位置数据。的核心优势,结合应用场景与选型指南,为工程师提供一站式解决方案参考。MT6826SGT-STD-R是一款专为工业级精密控制设计的。该设备广泛应用于伺服系统、机器人关节校准、自动化产线等领域。:15bit分辨率实现细腻的位置反馈;:通过专用编写器可自定义多项关键参数;:优化电路设计,适应复杂电磁环境。 阅读详情

《剑指Offer——名企面试官精讲典型编程题》

作者:何海涛


一、书上原题再现

面试题3:二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。


二、涉及的知识点

 


三、解题过程

首先一看到数组,就会下意识的想到遍历,就是挨个比较,看看要查找的数在不在里面,遍历虽然是万能的,但是一个一个的比较,未免太过麻烦。不妨找找有没有其他的方法,如果实在是找不到,最后再用遍历的方法。

这道题比较特殊,特殊在数字是有序的,最小的数在左上角,最大的数在右下角,如下图所示:

假如要查找9是否在二维数组内,我们可以选择从右上角开始查找,发现9>4,因为从左到右递增,9都比4这一行最右边的一个数大了,所以这时候就可以忽略4左边的所有数了,直接往下走进行比较(相当于删掉一整行),发现9>8,同理,继续往下(相当于删掉一整行),发现9<12,说明9有可能在12的左边,往左走进行比较,发现9<11,同理,继续往左,发现9<10,继续往左,发现9=9,返回结果为true,说明9在该二维数组中。

如下图所示:

对上面这段话的一开始有个疑问,为什么要从右上角开始进行比较,能不能换个地方?

答案是:能。

发现右上角往左是递减,往下是递增。

相似左下角往右是递增,往上是递减。

所以左下角也可以当做入手点,能够实现比较一个数就删掉一整行。

还有左上角和右下角,这两个不能当做入手点,以左上角为例,最初数字1位于数组的左上角,因为这个数组是往右和往下两个方向递增的,我们要查找9,那么就无法做到删掉一行,因为9既有可能在1的右边,也有可能在1的下边,右下角道理相似。


四、调试步骤

使用MyEclipse进行调试

上图示意图的代码实现:

  • 先把flag设为false,默认不存在。
  • 默认数组每行列数都相等,所以可以用rows=array.length来代表行数,columns=array[0].length来代表列数。
  • row 和 column 来控制比较的切入点为右上角,所以row=0,column=columns-1,减一是因为数组下标索引从0开始而不是从1开始。

 

我的完整测试代码:

https://github.com/littlecurl/CodingInterviews

 

 


五、总结

因为这道题的特殊性,所以有特殊解法的存在。与遍历相比,这样一次删掉一行或一列的方法显然要快速的多。

 


六、声明与致谢

本题源代码请移步《剑指Offer》作者何海涛的GitHub:https://github.com/zhedahht/CodingInterviewChinese2

      

参考文章:(每篇文章我都会去点赞https://i-blog.csdnimg.cn/blog_migrate/194e0757497c3aa2d41b59f750dbd29c.png,好的文章就应该公诸于世,大家共同学习)

  GitHub博客:

       Littlecurl的《二维数组中的查找》:

https://littlecurl.github.io/littlecurl.github.io/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E6%9F%A5%E6%89%BE-%E5%89%91%E6%8C%87Offer/

 

AMCL实战:如何用2D激光雷达在ROS中实现稳定重定位(附参数调优指南) 本文深入解析了在ROS中使用2D激光雷达实现稳定AMCL重定位的实战技巧与参数调优指南。针对粒子发散、位姿跳变等常见问题,文章从算法核心原理出发,系统讲解了初始化、粒子滤波、运动与观测模型等关键参数的分类与调优策略,并提供了一套经过验证的调优框架,帮助开发者提升移动机器人在已知地图环境下的定位鲁棒性和稳定性。 阅读详情

相关推荐

别再问“这游戏啥引擎做的”了,手把手教你用SteamDB一键查询(附实战案例)

本文详细介绍了如何使用SteamDB一键查询游戏引擎信息,包括Unity 3D、Unreal Engine等热门引擎的识别方法。通过实战案例和高级查询技巧,帮助玩家快速获取游戏技术底细,优化游戏体验和兼容性分析。

weixin_31412781的博客 818

剑指offer 源代码链接(GitHub)

https://github.com/zhedahht/CodingInterviewChinese2

qq_42209189的博客 9944

2026年(新服务器默认密码)最新各大厂商默认凭证大全

本文整理了国内外主流服务器厂商的默认管理接口凭证信息,包括Dell、HPE、浪潮、华为等品牌的管理接口类型、默认用户名/密码和IP地址。特别强调国产服务器在信创环境下的安全风险,指出国内厂商部分型号仍保留固定默认密码(如浪潮admin/admin),而国际厂商多采用随机密码标签。文章提供了新机初始化安全流程建议:查找机箱标签、立即修改默认密码、配置网络隔离、更新固件等。最后提醒运维人员,服务器安全应从首次上电开始重视,管理接口暴露是重大风险点,必须严格执行安全规范。

你好,旧时光! 1696

何海涛博客【算法题】

何海涛博客

fei的专栏 841

基于GEC6818开发板的C/C++贪吃蛇小游戏

f.开始游戏(进入游戏,并没有马上开游戏,需要点击播放才能开始)2.相关宏,全局变量(可以根据自己需要进行修改)k.显示文字前的相关初始化。k.自定义font.h文件。1.需要的主要头文件。l.在开发板上显示字1。m.在开发板上显示字2。a.显示固定大小图片。h.线程1:获得坐标。

2301_77273301的博客 2132

若依前后端分离版实战:MQTT集成保姆级教程(含MQTTX测试工具使用)

本文详细介绍了在若依前后端分离架构中集成MQTT协议的完整流程,包括环境搭建、核心配置、安全实践及性能优化。通过MQTTX测试工具的使用和实战代码示例,帮助开发者快速实现物联网场景下的实时通信功能,提升系统稳定性和效率。

weixin_30664051的博客 456

《剑指Offer》面试题3:二维数组中的查找

《剑指Offer——名企面试官精讲典型编程题》 作者:何海涛 一、书上原题再现 面试题3:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、涉及的知识点 三、解题过程 ...

weixin_30596165的博客 231

《FPGA接口与协议》专栏的说明与导航

《FPGA接口与协议》专栏的说明与导航(建议阅读)。

孤独的单刀 17万+

剑指offer-二维数组中的查找

vivo2020届春季校园招聘在线编程考试--[编程题]vivo智能手机产能题目解题思路代码块 题目 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。 假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 … … 以此...

liqiao96的博客 660

写给开发人员的实用密码学 - Hash算法

说到Hash(哈希),开发人员应该不陌生,比如Hash表是一种非常常用的数据结构,通过Hash表能够根据键值快速找到数据。哈希函数将文本(或其他数据)映射为整数,从而能够提高检索效率。密...

云水木石 1503

运放+MOS恒流源电路仿真分析

利用运放设计一个恒流源

HW-BASE的博客 4081

剑指Offer 面试题3:二维数组中查找

剑指Offer 面试题3:二维数组中查找 题目:在一个二维数组中,每一行都是按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的数组 1 2 8 9 2 4 9 12 4 7 10 13 6

水水哥哟哟的博客 413

RT-DETR升级:TGRS2026 CKConv结合RepC3 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降

小目标鲁棒性提升:CKConv方向选择性抑制背景噪声,RepC3跨阶段传递保留深层微弱热信号,显著改善低对比度、低信噪比场景下的检测精度。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 151

【剑指Offer学习】【面试题3 :二维数组中的查找】

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

https://github.com/Wang-Jun-Chao 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《剑指offer》面试题3:二维数组中的查找

面试题3:二维数组中的查找 面试题3:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的个二维数组和一个整数,判断数组中是否含有该整数。   例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返 false。 1 2 8 ...

专注于C/C++/Linux领域创作 336

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《剑指offer》【面试题3:二维数组中的查找】

面试题3:二维数组中的查找数组基础点:一种基本的数据结构,用于在一块连续的内存中并按照顺序存储数据。创建数组时,先指定数组的大小,然后根据数组的大小进行分配内存。即使在数组中只存储一个数字,也要为整个数组分配内存大小。所以数组的空间利用率不是很好,经常会有空闲的区域没有很好的利用而浪费掉。但是数组的内存连续也有它的优点:可以根据下标在O(1)时间读、写任何元素,所以对于访问数组中的元素的效率还是很...

IT_model的博客 1万+

剑指offer 面试题3:二维数组中查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路分析: 首先选取数组右上角的数字。比较该数字和要查找的数字: 如果该数字等于要查找的数字,查找过程结束; 如果该数字大于要查找的数字,剔除该数字所在列; 如果该数字小于要查找的数字,剔除该数字所在的行。 下面是

海阔天空sky的博客 669

【剑指offer】面试题3:二维数组中的查找

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

solar一抹阳光的专栏 1180

【一刷《剑指Offer》】面试题 3:二维数组中的查找

核心考点:数组相关,特性观察,时间复杂度把握。

Elena's Blog 1317

《剑指offer》Python语言 面试题3:二维数组中的查找

写在开头的话:     当想写这个的时候,发现已经有人做了这个工作了,详情请见Python基础算法/剑指offer,然而依然决定自己写下这个系列,作为算法部分的巩固和提高。在自己写完后会借鉴Python基础算法/剑指offer的代码,如有部分重复,还请见谅。 # -*- coding: UTF-8 -*-. ''' 在一个二维数组中,每一行都按照从左到右严格递增的顺序排序 每一列都按照从上到下

da_da007的博客 975

剑指offer之面试题3:二维数组中的查找

题  目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 由于二维数组元素的值是有规律的,从左到右(从上到下)是按照值递增的顺序排列的,故不应该对整个数组进行盲目(双层循环解决)搜索查找。在查找所查找的值number是否存在于二维数组,我们从 “右上

u010665065的博客 346

剑指offer面试题3:二维数组中的查找 java实现

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

做一名努力的通信程序员 620

剑指offer——面试题3:二维数组中的查找

剑指offer——面试题3:二维数组中的查找 1.笨蛋方法 复杂度为O(n2)O(n2)O(n^2) class Solution { public: bool Find(int target, vector&lt;vector&lt;int&gt; &gt; array) { for(int i=0;i&lt;array.size();i++){ ...

Allenlzcoder的博客 397

剑指Offer面试题3:二维数组的查找 Java实现

题目:二维数组的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断该数组是否含有该整数。例如在下面的二维数组中,如果查找数字7,则返回true;如果查找数字5,由于矩阵不含有该数,则返回false。 1    2    8     9 2    4    9     12

做一名努力的通信程序员 432

《剑指offer》面试题3:二维数组的查找(java实现)

《剑指offer》面试题3:二维数组的查找(java实现) 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 ——来源于《剑指offer》 解题思路 选取左下角或者右上角的元素与输入的整数进行比较,如果相等就返回,否则就剔除相应的行或者列再重复上面操作。 利用递归实现:...

芊雨的博客 203

剑指Offer学习 【面试题3 :二维数组中的查找】 主对角线分治解法

学习剑指offer第三题时,想着不看答案,自己先写一种实现,看了参考答案的思路,自己用标准答案的另外一种想法,结合了分治思想,搞了一天,才搞出一版代码,感觉很happy,发个原创,供大家参考,也为了自己以后查看方便。欢迎讨论,转载请注明出处,谢谢! public class Test03 { /** * 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照...

f290384664的博客 352

【剑指offer】面试题3:二维数组的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 class Solution { public: bool Find(vector > array,int target) { int rows = array.size();

stone_flower_rain的博客 399
上一篇: 【剑指Offer】面试题2:实现Singleton(单例)模式
下一篇: 【大数据】CentOS6.5x64搭建Hadoop环境
midnight_time
博客等级 码龄10年 1714粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值