leetcode热题HOT 74. 搜索二维矩阵

一、问题描述:

给你一个满足下述两条属性的 m x n 整数矩阵:
每行中的整数从左到右按非严格递增顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

二、二分查找:

1、思路分析:使用二分查找的思想,将二维矩阵当作一维数组来处理。

将二维矩阵展开成一维数组后,可以通过计算元素在一维数组中的索引来访问对应的元素。
设定搜索范围为一维数组的起始位置到结束位置,然后在该范围内进行二分查找。
在每次迭代中,计算中间元素的值,并与目标值进行比较,根据比较结果更新搜索范围。

2、代码示例

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n = matrix.length, m = matrix[0].length; // 获取矩阵的行数和列数int low = 0, high = m * n - 1; // 初始化二分查找的搜索范围为一维数组的起始位置到结束位置while (low <= high) { // 当搜索范围有效时执行循环int mid = low + (high - low) / 2; // 计算中间元素的索引int x = matrix[mid / m][mid % m]; // 获取中间元素的值if (x > target) // 如果中间元素大于目标值high = mid - 1; // 更新搜索范围为左半部分else if (x < target) // 如果中间元素小于目标值low = mid + 1; // 更新搜索范围为右半部分else // 如果中间元素等于目标值return true; // 返回true}return false; // 若搜索范围无效,则返回false}
}

3、 时间复杂度分析:

设矩阵的行数为n,列数为m。在初始化后,二分查找的时间复杂度为O(log(nm))。
每次迭代中,都是在一维数组中进行操作,因此单次迭代的时间复杂度为O(1)。
整体的时间复杂度取决于二分查找的次数,即O(log(n
m))。

三、搜索二叉树法(思想类似):

1、思路分析

在二叉搜索树中,每个节点都有左子树和右子树,且左子树中的所有节点的值都小于当前节点的值,右子树中的所有节点的值都大于当前节点的值。因此,可以利用这个性质在BST中进行高效的搜索。这种思路称为二分搜索,每次搜索都可以将搜索范围缩小一半,因此搜索效率很高。虽然二维矩阵不是二叉搜索树,但可以利用类似的思想,在每一步中根据当前元素与目标值的大小关系,决定搜索范围的缩小方向。

2、具体步骤

从二维矩阵的右上角开始,利用矩阵的性质进行搜索:
①如果当前元素大于目标值,则目标值不可能在当前元素的列中,因此将列索引向左移动。
②如果当前元素小于目标值,则目标值不可能在当前元素的行中,因此将行索引向下移动。
③如果当前元素等于目标值,则找到目标值,返回true。
重复以上步骤直到找到目标值或者搜索范围超出矩阵边界。

3、代码示例

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n = 0, m = matrix[0].length - 1;while(n < matrix.length && m >= 0){if(matrix[n][m] > target) m--;else if(matrix[n][m] < target) n++;else return true;}return false;}
}

4、 时间复杂度分析:

设矩阵的行数为n,列数为m。在最坏情况下,搜索范围会在矩阵的对角线上移动,因此时间复杂度为O(n + m)。
在每次迭代中,都是在矩阵中进行操作,因此单次迭代的时间复杂度为O(1)。
整体的时间复杂度为O(n + m)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络编程】UDP实现回显服务器

一.网络编程的基本术语. 客户端 客户端是为用户提供本地服务的程序&#xff0c;通常位于用户设备上。也称为用户端&#xff0c;是相对于服务器而言的。它主要指安装在用户设备上的程序&#xff0c;这些程序能够与服务器进行通信&#xff0c;从而获取服务或者执行特定功能。在…

Spark安装教程

Spark安装教程 文章目录 Spark安装教程1. 检查jdk版本2. 获取Spark版本安装资源3.环境变量4.配置文件5. 重启Hadoop集群(使配置生效)6. 启动Spark集群6.1 查看Spark服务6.2 访问Spark WEB UI 7. 启动 Spark-Shell 测试 Scala 交互式环境8. 测试Spark On Yarn9.关闭Spark集群 1.…

OpenHarmony实战开发-Grid和List内拖拽交换子组件位置。

介绍 本示例分别通过onItemDrop()和onDrop()回调&#xff0c;实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明&#xff1a; 拖拽Grid中子组件&#xff0c;到目标Grid子组件位置&#xff0c;进行两者位置互换。拖拽List中子组件&#xff0c;到目标List子组件…

STM32-ADC(独立模式、双重模式)

ADC简介 18个通道&#xff1a;外部信号源就是16个GPIO回。在引脚上直接接模拟信号就行了&#xff0c;不需要侄何额外的电路。引脚就直接能测电压。2个内部信号源是内部温度传感器和内部参考电压。 逐次逼近型ADC: 它是一个独立的8位逐次逼近型ADC芯片&#xff0c;这个ADC0809是…

性能测试 Jmeter 非 GUI 模式 -CLI 命令详解

我们在使用Jmeter做性能测试的时候&#xff0c;大部分同学用的是图形化界面进行脚本编写和执行性能测试的。但是其实真正在公司执行性能测试的时候&#xff0c;我们基本上不会用图形化界面去执行测试&#xff0c;这是因为工具渲染这些图形本身会让Jmeter结果存在很多不稳定的因…

FMEA赋能可穿戴设备:打造安全可靠的未来科技新宠!

在科技日新月异的今天&#xff0c;可穿戴设备已成为我们生活中不可或缺的一部分。它们以其便携性、智能化和个性化的特点&#xff0c;深受消费者喜爱。然而&#xff0c;随着可穿戴设备市场的快速扩张&#xff0c;其安全性和可靠性问题也日益凸显。为了确保产品质量&#xff0c;…

微信小程序全局配置

全局配置文件及常用的配置项 小程序根目录下的 app.json 文件是小程序的全局配置文件。常用的配置项如下&#xff1a; ① pages 记录当前小程序所有页面的存放路径 ② window 全局设置小程序窗口的外观 ③ tabBar 设置小程序底部的 tabBar 效果 ④ style 是否启用新版的组件样…

图灵奖2023:Avi Wigderson的开创性贡献揭示计算中的随机性和伪随机性

文章目录 每日一句正能量前言背景什么是理论计算机科学&#xff1f;为什么随机性很重要&#xff1f;三篇影响深远的论文Avi Wigderson在计算复杂性理论方面的贡献及其对现代计算的影响Avi Wigderson对随机性和伪随机性在计算中作用的理解及其实际应用Avi Wigderson的学术生涯和…

Spring、SpringMVC、SpringBoot核心知识点(持续更新中)

Spring、SpringMVC、SpringBoot核心知识点&#xff08;持续更新中&#xff09; Spring Bean 的生命周期Spring 的 IOC 与 AOPSpring Bean 循环依赖Spring MVC 处理请求的过程Spring Boot 自动装配原理Spring Boot 启动流程 Spring Bean 的生命周期 参考文章&#xff1a;一文读…

HBase的数据模型与架构

官方文档&#xff1a;Apache HBase – Apache HBase™ Homehttps://hbase.apache.org/ 一、HBase概述 1.概述 HBase的技术源自Google的BigTable论文&#xff0c;HBase建立在Hadoop之上&#xff0c;是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统&#xff0c;用于…

mac上 Sublime Text 无法使用 Package Control

我也不知道什么时候用不了的&#xff0c;平时就是用来看看文本文件&#xff0c;因为觉得这个玩意真的很快 今天想安装一个包&#xff0c;发现 cmd shift P 是出来那个窗口了&#xff0c;但是输入什么都没反应&#xff0c;于是在 github 上找到了解决方案 打开终端执行以下命…

vivado 在硬件管理器中调试 AXI 接口

在硬件管理器中调试 AXI 接口 IP integrator 中的 System ILA IP 支持您在 FPGA 上对设计执行系统内调试。在 Versal 器件上 &#xff0c; System ILA 核已被废 弃。现在 &#xff0c; 在含 AXIS 接口的标准 ILA 中支持接口调试。如需监控 IP integrator 块设计中的…

安达发|体育产业体育装备生产车间APS排产软件

在体育产业中&#xff0c;体育装备的生产是保障运动员成绩和安全的关键一环。随着市场需求的多样化和个性化&#xff0c;传统的生产排程方法已经难以满足现代体育装备生产的复杂性和灵活性。因此&#xff0c;应用高级排产软件&#xff08;APS&#xff09;进行生产计划和控制成为…

RD77MS2 三菱iQ-R系列2轴简单运动模块(SSCNETⅢ/H型)

RD77MS2 三菱iQ-R系列2轴简单运动模块(SSCNETⅢ/H型) RD77MS2用户手册,RD77MS2外部连接,RD77MS2规格。RD77MS2参数说明&#xff1a;2轴;SSCNETⅢ/H连接&#xff0c;位置控制、同步控制、速度.转矩控制、轨迹控制;控制单位mm、inch、degree、pulse;定位数据600数据轴。 RD77MS2图…

APIGateway的认证

APIGateway的支持的认证如下&#xff1a; 我们从表格中可以看到&#xff0c;HTTP API 不支持资源策略的功能&#xff0c;另外是通过JWT的方式集成Cognito的。 对于REST API则是没有显示说明支持JWT认证&#xff0c;这个我们可以通过Lambda 自定义的方式来实现。 所以按照这个…

AR、VR、MR 和 XR——它们的含义以及它们将如何改变生活

我们的工作、娱乐和社交方式正在发生巨大变化。远程工作的人比以往任何时候都多,屏幕已成为学习和游戏的领先平台。这种演变为元宇宙铺平了道路——如今,像 Meta Quest 2 这样的流行设备将您无缝地带入一个身临其境的世界,您可以在其中购物、创作和玩游戏、与同事协作、探索…

Ubuntu 部署ChatGLM3大语言模型

Ubuntu 部署ChatGLM3大语言模型 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。 源码&#xff1a;https://github.com/THUDM/ChatGLM3 部署步骤 1.服务器配置 Ubuntu 20.04 8核(vCPU) 32GiB 5Mbps GPU NVIDIA T4 16GB 硬盘 100GiB CUDA 版本 12.2.2/…

适用于 Windows 的 10 个顶级 PDF 编辑器 [免费和付费]

曾经打开PDF文件&#xff0c;感觉自己被困在数字迷宫中吗&#xff1f;无法编辑的文本、无法调整大小的图像以及签署感觉像是一件苦差事的文档&#xff1f;好吧&#xff0c;不用再担心了&#xff01;本指南解开了在 Windows 上掌握 PDF 的秘密&#xff0c;其中包含 10 款适用于 …

04 MySQL --DQL 专题--Union、exists

1. UNION、UNION ALL UNION 关键字的作用&#xff1f; 合并两个或多个 SELECT 语句的结果。发挥的作用与 or 非常相似 UNION关键字生效的前提&#xff1f; 每个 SELECT 语句必须拥有相同数量的列。每个 SELECT 语句中的列的顺序必须相同。列必须拥有相似的数据类型。 SELEC…

Hyperledger Fabric

一.Hyperledger Fabric介绍 Hyperledger区块链全家桶 Hyperledger Fabric技术特性 资产 — 资产定义使得几乎任何具有货币价值的东西都可以在网络上交 换&#xff0c;包括从食品到古董汽车再到货币期货。链码 — 链码执行与交易排序的分离&#xff0c;限制了跨节点类型所需的…