搜索二维矩阵 - LeetCode 热题 64

大家好!我是曾续缘🧡

今天是《LeetCode 热题 100》系列

发车第 64 天

二分查找第 2 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

搜索二维矩阵

给你一个满足下述两条属性的 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
难度:💖💖

解题方法

首先,我们需要明确题目中矩阵的两个特性:每一行从左到右递增,每一行的第一个数比上一行的最后一个数大。这意味着整个矩阵在某种意义上是“排序”的,我们可以利用这一点来快速定位元素。
在解决这个问题时,我们可以把矩阵看作一个一维数组,然后使用二分查找算法。如何把二维矩阵映射到一维数组呢?考虑到矩阵有 m 行 n 列,我们可以将矩阵的行优先展开,即先放置第一行的所有元素,然后是第二行,依此类推。这样,矩阵中的元素 matrix[i][j] 将会映射到一维数组中的位置 i * n + j
接下来,我们可以在这个假想的一维数组上使用二分查找。二分查找的基本思想是在有序数组中通过重复将搜索区间减半来定位目标值。具体步骤如下:

  1. 确定搜索范围的最小和最大索引,初始时最小索引 l0,最大索引 rm * n - 1(即矩阵中最后一个元素的索引)。
  2. 计算中间索引 mid = (l + r) / 2,然后找到这个索引对应的矩阵中的元素 matrix[mid / n][mid % n]
  3. 比较这个元素与目标值 target
    • 如果相等,说明找到了目标值,返回 true
    • 如果小于目标值,说明目标值应该位于当前元素的右侧,于是我们将搜索范围的最小索引调整为 mid + 1
    • 如果大于目标值,说明目标值应该位于当前元素的左侧,于是我们将搜索范围的最大索引调整为 mid - 1
  4. 重复步骤 2 和 3,直到找到目标值或者搜索范围为空(即 l > r),此时如果还没有找到目标值,则返回 false
    这个方法的时间复杂度是 O(log(m*n)),空间复杂度是 O(1),因为我们在原地进行搜索,没有使用额外的空间。

Code

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length, n = matrix[0].length;int l = 0, r = m * n - 1;while(l <= r){int mid = (l + r) / 2;int val = matrix[mid / n][mid % n];if(val == target){return true;}else if(val < target){l = mid + 1;}else{r = mid - 1;}}return false;}
}

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

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

相关文章

Github项目部署到自己的域名

天坑&#xff0c;买的是华为的域名&#xff0c;不过新用户才一块&#xff0c;就忍了 要买个域名&#xff0c;我买的是华为的&#xff08;此处是购买地址&#xff09; 购买后去控制台&#xff0c;点击“总览”进入域名页面 点击想要修改的域名后的“管理解析” 点击快速解析&…

Linux 操作系统MySQL 数据库指令

1.MySQL 数据库 数据库是“按照数据结构来组织、 存储和管理数据的仓库”。 是一个长期存储在计算机内的、 有组织的、 可共享的、 统一管理的大量数据的集合。 它的存储空间很大&#xff0c; 可以存放百万条、 千万条、 上亿条数据。 但是数据库并不是随意地将数据进行…

如何看固态硬盘是否支持trim功能?固态硬盘开启trim数据还能恢复吗

随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已成为电脑存储的主流选择。相较于传统的机械硬盘&#xff0c;固态硬盘以其高速读写和优秀的耐用性赢得了广泛好评。而在固态硬盘的众多功能中&#xff0c;TRIM功能尤为关键&#xff0c;它能有效提升固态硬盘…

中国品牌日 | 紫光展锐以科技创新驱动品牌价值 提升全球竞争力

5月10日至5月14日&#xff0c;以“中国品牌&#xff0c;世界共享&#xff1b;国货潮牌&#xff0c;品筑未来”为主题的第八届中国品牌日活动在上海世博展览馆举行。该活动由国家发展改革委联合国务院国资委、市场监管总局、国家知识产权局共同主办&#xff0c;聚焦新经济新消费…

2024彩虹医械维修培训邀请

INVITATION 2024年5月20日 时间/TIME 地点/SITE &#xff08;西安、成都&#xff09; 随着我国医疗水平的提升&#xff0c;为适应现代医疗的发展步伐&#xff0c;提升医疗服务水平&#xff0c;各个医院在当下都开始重视医疗器械的维修。在医械行业&#xff0c;由于医疗器械…

为何Linux成为你不可或缺的技能

在数字化飞速发展的今天&#xff0c;无论你是IT行业的精英&#xff0c;还是其他领域的专业人士&#xff0c;掌握Linux都已经成为一项至关重要的技能。那么&#xff0c;为什么一定要学会Linux呢&#xff1f;以下文章仅供参考 1. 开源的力量&#xff1a;无限的可能性 Linux是一…

网页设计web

效果图代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>* …

惠海 H4112 同步整流30V降压芯片IC 24V转12V5V3.3V3.5A方案EN使能控制

惠海H4112同步整流30V降压芯片IC是一款DCDC电源管理芯片&#xff0c;它具备精确恒压和恒流的同步降压能力&#xff0c;适用于多种应用场景&#xff0c;如汽车充电器、照明灯、便携式设备供电电源和电池充电器等。 输出电压与电流调整&#xff1a; H4112支持输出电压在2.5V到2…

10W 3KVAC隔离 宽电压输入 AC/DC 电源模块 ——TP10AF系列

TP10AF系列输出功率为10W&#xff0c;具有可靠性高、更小的体积、性价比高等特点&#xff0c;广泛用于工控和电力仪器、仪表、智能家居等相关行业。

【计算机毕业设计】基于SSM++jsp的学院党员管理系统【源码+lw+部署文档+讲解】

目录 目 录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删…

10个必备功能跨境电商ERP开发全指南

跨境电商平台开发是当前电商行业的热门话题。随着全球贸易的不断发展&#xff0c;企业越来越关注并重视跨境电商ERP系统的开发和应用。在本文中&#xff0c;我们将深入探讨跨境电商ERP开发的必备功能&#xff0c;为您呈现全面的指南。 1. 跨境订单管理 跨境电商平台需要具备全…

文本分类TextRNN_Att模型(pytorch实现)

TextRNN_Att TextRNN-Att简介模型结构&#xff1a;pytorch代码实现&#xff1a; TextRNN-Att简介 TextRNN前面已经介绍过了&#xff0c;主体结构就是一个双向/单向的LSTM层&#xff0c;由于LSTM获得每个时间点的输出信息之间的“影响程度”都是一样的&#xff0c;而在关系分类…