搜索二维矩阵 - 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;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

激光切割机哪家可靠?

激光切割机哪家可靠&#xff1f;市面上的激光切割机牌子很多&#xff0c;具体什么牌子好&#xff0c;建议综合考虑一下企业成立时间、技术实力、设备工艺做工、售后服务&#xff0c;一般成立时间长&#xff0c;设备装配经验丰富&#xff0c;售后服务完善的企业&#xff0c;能够…

深度学习之卷积神经网络理论基础

深度学习之卷积神经网络理论基础 卷积层的操作&#xff08;Convolutional layer&#xff09; 在提出卷积层的概念之前首先引入图像识别的特点 图像识别的特点 特征具有局部性&#xff1a;老虎重要特征“王字”仅出现在头部区域特征可能出现在任何位置下采样图像&#xff0c…

银行业数据分析专家视角:业务场景中的深度解析与应用

一、引言 在数字化和大数据时代的浪潮下&#xff0c;银行业正经历着前所未有的变革。作为数据分析领域的资深专家&#xff0c;我深知数据分析在银行业务发展中的重要性和价值。本文将从银行业数据分析的角度出发&#xff0c;深入探讨相关业务场景下的数据分析应用&#xff0c;…

Linux 操作系统MySQL 数据库指令

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

[vue] nvm use时报错 exit status 1:一堆乱码,exit status 5

报错exit status 5&#xff1a;&#xfffd;ܾ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ʡ&#xfffd; 原因&#xff1a;因为当前命令提示符窗口是user权限&#xff0c; 解决&#xff1a;cmd使用管理员方式打开就可以 参考&#xff1a; vm use时报错 exit status 1…

24长三角A题思路+分析选题

需要资料的宝子们可以进企鹅获取 A题 问题1&#xff1a;西湖游船上掉落华为 mate 60 pro 手机 1. 手机掉落范围分析 物品特征&#xff1a;华为 mate 60 pro 手机的尺寸、重量、形状等特性。静水假设&#xff1a;西湖水面平静&#xff0c;不考虑水流影响。掉落位置&#xff…

Linux基础之进程的优先级

目录 一、进程优先级的概念 二、进程优先级的查看 三、怎么修改进程优先级 四、进程饥饿 一、进程优先级的概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linu…

从零入门激光SLAM(十七)——SLAM中为什么用ESKF误差卡尔曼滤波器

上一节&#xff0c;介绍了卡尔曼滤波的基本原理&#xff0c;但在SLAM中却使用ESKF&#xff0c;让我们一起看看具体的原因是什么吧 一、误差卡尔曼滤波器ESKF(Error State Kalman Filter) 1.1动机 在常规的卡尔曼滤波器中&#xff0c;需要假定系统的状态服从高斯分布&#xf…

语法分析-文法

如果对于一部文法中&#xff0c;存在至少一个句子有两个或者两个以上的语法树则该文法是二义性的。 我们可以以上面的例子进行解释&#xff0c;对于第棵个语法树&#xff0c;我们可以看到是先进行了加法运算再进行的乘法运算&#xff0c;因为需要先把EE作为整体运算完后再成为E…

github新手用法

目录 1&#xff0c;github账号注册2&#xff0c;github登录3&#xff0c;新建一个仓库4&#xff0c;往仓库里面写入东西或者上传东西5&#xff0c; 下载Git软件并安装6 &#xff0c;获取ssh密钥7&#xff0c; 绑定ssh密钥8&#xff0c; 测试本地和github是否联通9&#xff0c;从…

研发数据在企业内部多重传输场景,怎样才能有效响应?

研发数据因行业不同包含的种类各异&#xff0c;主要有设计和仿真数据、研发投入、进展和成果数据、生产过程数据、维护和保养数据、质量数据等&#xff0c;企业研发数据对企业而言具有至关重要的意义。特别是以研发为核心业务及定位的企业&#xff0c; 如半导体 IC 设计、生物制…

淘宝购物必备神器,淘宝商品评论电商API接口告诉你真实惠品质好!

众所周知&#xff0c;淘宝作为国内最大的电商平台&#xff0c;拥有数以亿计的商品以及海量的评论。然而&#xff0c;由于淘宝上的商品数量庞大&#xff0c;品质参差不齐&#xff0c;买家往往难以决策。此外&#xff0c;有些商品的评论可信度也受到一定的质疑&#xff0c;很难了…

SSM框架打造的高效稳定网上购物商城管理系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

冯喜运:5.16黄金多头或挑战2400关口,原油最新行情分析

【黄金消息面分析】&#xff1a;在最新数据显示通胀回落和零售销售疲软后&#xff0c;交易员评估美联储转向货币宽松的时机和幅度&#xff0c;黄金市场出现了一些新的动力。根据周三&#xff08;5月15日&#xff09;公布的数据&#xff0c;衡量美国潜在通胀的指标4月份出现六个…

C++进阶之路:何为默认构造函数与析构函数(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

用AI帮你写简历,入职啦简历编辑器

简历的重要性 在当前就业形势严峻、竞争加剧的背景下&#xff0c;获取理想工作的难度与日俱增。此时&#xff0c;一份精心准备、亮点突出的简历&#xff0c;成为了您脱颖而出、成功获得面试机会乃至工作offer的关键。面对HR有限的审阅时间和众多应聘者的激烈角逐&#xff0c;如…

【高阶数据结构(四)】图的最短路径问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:高阶数据结构专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多数据结构   &#x1f51d;&#x1f51d; 高阶数据结构 1. 前言2. 单源最短…

STAR-Echo:一种使用时空分析和基于Transformer的影像组学模型预后慢性肾脏病患者 MACE 预后的新型生物标志物

文章目录 STAR-Echo: A Novel Biomarker for Prognosis of MACE in Chronic Kidney Disease Patients Using Spatiotemporal Analysis and Transformer-Based Radiomics Models摘要方法实验结果 STAR-Echo: A Novel Biomarker for Prognosis of MACE in Chronic Kidney Disease…

Stable Diffusion【进阶篇】:真人漫改之图生图实现

所谓真人漫改&#xff0c;就是把一张真人的图片生成一张新的二次元的图片&#xff0c;在Stable Diffusion中&#xff0c;有很多方式实现&#xff0c;其中通过图生图的方式是最常用的方式&#xff0c;大概1-3分钟就可以完成&#xff0c;本文我们系统的讲解一下。 、 下面我们来详…

YOLOv8火焰与烟雾智能检测系统

项目概述&#xff1a; 本项目旨在开发一款高效、实时的火焰与烟雾检测系统&#xff0c;利用先进的深度学习技术——YOLOv8&#xff0c;为安全监控领域提供智能化解决方案。系统不仅能够准确识别视频流或静态图像中的火焰与烟雾&#xff0c;还配备了用户友好的图形界面&#xff…