当前位置: 首页 > news >正文

算法leetcode|74. 搜索二维矩阵(rust重拳出击)


文章目录

  • 74. 搜索二维矩阵:
    • 样例 1:
    • 样例 2:
    • 提示:
  • 分析:
  • 题解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


74. 搜索二维矩阵:

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

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 在有序列表中,查找指定元素,一般使用二分查找,非常高效。
  • 但是题目中是个二维矩阵,是否还能用二分查找呢?
  • 首先想到,可以用两次二分查找,分别看在哪行,再看在哪列,效率已经很高了,但是是否能只用一次二分查找呢?
  • 想要使用一次二分查找,就需要将二维矩阵转换成线性结构,有什么办法呢?
  • 我们可以快速算出矩阵的长和宽,也就可以拿到它的总长度,我们可以快速将长度范围内的下标,快速转换成行和列的下标,因为行列都是等长的。

题解:

rust:

impl Solution {pub fn search_matrix(matrix: Vec<Vec<i32>>, target: i32) -> bool {let (m, n) = (matrix.len(), matrix[0].len());let (mut left, mut right) = (0, m * n);while left < right {let mid = left + ((right - left) >> 1);let v = matrix[mid / n][mid % n];if v < target {left = mid + 1;} else if v > target {right = mid;} else {return true;}}return false;}
}

go:

func searchMatrix(matrix [][]int, target int) bool {m, n := len(matrix), len(matrix[0])i := sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] >= target })return i < m*n && matrix[i/n][i%n] == target
}

c++:

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {const int m = matrix.size(), n = matrix[0].size();int left = 0, right = m * n;while (left < right) {const int mid = left + ((right - left) >> 1);const int v = matrix[mid / n][mid % n];if (v < target) {left = mid + 1;} else if (v > target) {right = mid;} else {return true;}}return false;}
};

python:

class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:m, n = len(matrix), len(matrix[0])left, right = 0, m * nwhile left < right:mid = left + ((right - left) >> 1)v = matrix[mid // n][mid % n]if v < target:left = mid + 1elif v > target:right = midelse:return Truereturn False

java:

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

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


相关文章:

算法leetcode|74. 搜索二维矩阵(rust重拳出击)

文章目录 74. 搜索二维矩阵&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 74. 搜索二维矩阵&#xff1a; 给你一个满足下述两条属性的…...

element浅尝辄止7:InfiniteScroll 无限滚动

滚动加载&#xff1a;滚动至底部时&#xff0c;加载更多数据。 1.如何使用&#xff1f; //在要实现滚动加载的列表上上添加v-infinite-scroll&#xff0c;并赋值相应的加载方法&#xff0c; //可实现滚动到底部时自动执行加载方法。<template><ul class"infinit…...

Day05-Vue基础

Day05-Vue基础 一、单向数据流 父子组件通信。会在父组件中定义好数据,将数据传递给子组件,可以使用这个数据 Vue中针对props这个属性提出了一个单向数据流的概念。 Vue针对props做了一些限制,可以接受值,使用这个值,规范中不要去直接修改这个值 目的是为了对数据流进…...

《机器学习在车险定价中的应用》实验报告

目录 一、实验题目 机器学习在车险定价中的应用 二、实验设置 1. 操作系统&#xff1a; 2. IDE&#xff1a; 3. python&#xff1a; 4. 库&#xff1a; 三、实验内容 实验前的猜想&#xff1a; 四、实验结果 1. 数据预处理及数据划分 独热编码处理结果&#xff08;以…...

14. Docker中实现CI和CD

目录 1、前言 2、什么是CI/CD 3、部署Jenkins 3.1、下载Jenkins 3.2、启动Jenkins 3.3、访问Jenkins页面 4、Jenkins部署一个应用 5、Jenkins实现Docker应用的持续集成和部署 5.1、创建Dockerfile 5.2、集成Jenkins和Docker 6、小结 1、前言 持续集成(CI/CD)是一种…...

【多思路解决喝汽水问题】1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水

题目内容 喝汽水问题 喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff08;编程实现&#xff09;。 题目分析 数学思路分析 根据给出的问题和引用内容&#xff0c;我们可以得出答案。 首先&#xff…...

P1591 阶乘数码(Java高精度)

题目描述 求 n ! n! n! 中某个数码出现的次数。 输入格式 第一行为 t ( t ≤ 10 ) t(t \leq 10) t(t≤10)&#xff0c;表示数据组数。接下来 t t t 行&#xff0c;每行一个正整数 n ( n ≤ 1000 ) n(n \leq 1000) n(n≤1000) 和数码 a a a。 输出格式 对于每组数据&a…...

Mybatis的动态SQL及关键属性和标识的区别(对SQL更灵活的使用)

&#xff08; 虽然文章中有大多文本内容&#xff0c;想了解更深需要耐心看完&#xff0c;必定大有受益 &#xff09; 目录 一、动态SQL ( 1 ) 是什么 ( 2 ) 作用 ( 3 ) 优点 ( 4 ) 特殊标签 ( 5 ) 演示 二、#和$的区别 2.1 #使用 ( 1 ) #占位符语法 ( 2 ) #优点 2.…...

mysql下载

网址 MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 2、选择MSI进行安装 3、这里我选择离线安装 4、这里我选择直接下载 5、等待下载安装即可...

聚合函数与窗口函数

聚合函数 回答一 聚合函数&#xff08;Aggregate Functions&#xff09;是SQL中的函数&#xff0c;用于对一组数据进行计算&#xff0c;并返回单个结果。聚合函数通常用于统计和汇总数据&#xff0c;包括计算总和、平均值、计数、最大值和最小值等。 以下是一些常见的聚合函…...

c语言实现堆

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、树1、树的概念2、树的相关概念3、树的表示 二、二叉树1、二叉树概念2、特殊的二叉树3、二叉树的性质4、二叉树的顺序结构5、二叉树的链式结构 三、堆(二叉树…...

ubuntu 如何将文件打包成tar.gz

要将文件打包成.tar.gz文件&#xff0c;可以使用以下命令&#xff1a; tar -czvf 文件名.tar.gz 文件路径 其中&#xff0c;-c表示创建新的归档文件&#xff0c;-z表示使用gzip进行压缩&#xff0c;-v表示显示详细的打包过程&#xff0c;-f表示指定归档文件的名称。 例如&am…...

前端优化页面加载速度的方法(持续更新)

提速方法方向 延迟脚本加载 使用 async 属性&#xff1a; 在这种方法中&#xff0c;脚本将在下载完成后立即执行&#xff0c;而不会阻塞其他页面资源的加载和渲染。这适用于那些不依赖于其他脚本和页面内容的脚本&#xff0c;例如分析脚本等。示例如下&#xff1a; html …...

利用SSL证书的SNI特性建立自己的爬虫ip服务器

今天我要和大家分享一个关于自建多域名HTTPS爬虫ip服务器的知识&#xff0c;让你的爬虫ip服务器更加强大&#xff01;无论是用于数据抓取、反爬虫还是网络调试&#xff0c;自建一个支持多个域名的HTTPS爬虫ip服务器都是非常有价值的。本文将详细介绍如何利用SSL证书的SNI&#…...

HTML和CSS

HTML HTML(Hyper Text Markup Language):超文本语言 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片、音频、视频等内容。 标记语言&#xff1a;由标签构成的语言 HTML标签都是预定义好的。例如&#xff1a;使用&l…...

C#的IndexOf

在 C# 中&#xff0c;IndexOf 是一个字符串、数组或列表的方法&#xff0c;用于查找指定元素的第一个匹配项的索引。它返回一个整数值&#xff0c;表示匹配项在集合中的位置&#xff0c;如果未找到匹配项&#xff0c;则返回 -1。 IndexOf 方法有多个重载形式&#xff0c;可以根…...

深度学习2.神经网络、机器学习、人工智能

目录 深度学习、神经网络、机器学习、人工智能的关系 大白话解释深度学习 传统机器学习 VS 深度学习 深度学习的优缺点 4种典型的深度学习算法 卷积神经网络 – CNN 循环神经网络 – RNN 生成对抗网络 – GANs 深度强化学习 – RL 总结 深度学习 深度学习、神经网络…...

利用LLM模型微调的短课程;钉钉宣布开放智能化底座能力

&#x1f989; AI新闻 &#x1f680; 钉钉宣布开放智能化底座能力AI PaaS&#xff0c;推动企业数智化转型发展 摘要&#xff1a;钉钉在生态大会上宣布开放智能化底座能力AI PaaS&#xff0c;与生态伙伴探寻企业服务的新发展道路。AI PaaS结合5G、云计算和人工智能技术的普及和…...

软件工程(七) UML之用例图详解

1、UML-4+1视图 UML-4+1视图将会与后面的架构4+1视图会一一对应上 视图往往出现在什么场景:我们看待一个事物,我们觉得它很复杂,难以搞清楚,为了化繁为简,我们会从一个侧面去看,这就是视图。而4+1视图就是分不同角度去看事物。 逻辑视图(logical view) 一般使用类与对…...

pd.cut()函数--Pandas

1. 函数功能 将连续性数值进行离散化处理&#xff1a;如对年龄、消费金额等进行分组 2. 函数语法 pandas.cut(x, bins, rightTrue, labelsNone, retbinsFalse, precision3, include_lowestFalse, duplicatesraise, orderedTrue)3. 函数参数 参数含义x要离散分箱操作的数组&…...

软件设计原则之OCP开闭原则

(OCP) 开闭原则 Open Closed Principle核心原则对扩展开放&#xff0c;对修改关闭。场景描述还是拿 UserInfo 进行举例。在开发过程中我们需要对我们使用的对象进行多步的组合操作&#xff0c;比如这里要打印账户和密码信息。常规的方式就是在外部直接进行调用&#xff0c;或者…...

OTFS系统中结构化稀疏表示与GPU优化实践

1. OTFS系统与结构化稀疏表示概述 在无线通信领域&#xff0c;正交时频空间(OTFS)调制技术因其在高移动性场景下的卓越性能而备受关注。与传统OFDM系统不同&#xff0c;OTFS将信息符号调制在时延-多普勒(DD)域&#xff0c;能够更好地抵抗多普勒扩展和时延扩展的影响。然而&…...

告别抖动与超调:深入剖析STM32直流电机控制中动态滤波与PI调节的协同优化策略

STM32直流电机控制进阶&#xff1a;动态滤波与PI调节的工程实践 在工业自动化与机器人控制领域&#xff0c;直流电机因其优异的调速性能仍是许多精密运动控制的首选。但当您已经搭建好基于STM32的PWM驱动和编码器反馈系统后&#xff0c;是否遇到过这样的困境&#xff1a;转速波…...

Universal MCP Toolkit:统一AI工具调用的开源框架实践

1. 项目概述&#xff1a;一个面向AI应用开发的“瑞士军刀”最近在折腾AI应用开发的朋友&#xff0c;可能都遇到过类似的困境&#xff1a;你有一个绝妙的想法&#xff0c;想让你的AI助手&#xff08;比如Claude、GPTs或者自己部署的模型&#xff09;去调用外部的工具&#xff0c…...

Python 虚拟环境完全指南:venv、virtualenv 与 Conda

Python 虚拟环境完全指南&#xff1a;venv、virtualenv 与 Conda 目录 虚拟环境概述venv 模块详解virtualenv 工具详解Conda 环境管理详解三者对比分析总结与建议 1. 虚拟环境概述 1.1 什么是虚拟环境 虚拟环境是一个独立的 Python 运行环境&#xff0c;它允许你在同一台机…...

终极指南:Awoo Installer - 快速安装Switch游戏的完整教程

终极指南&#xff1a;Awoo Installer - 快速安装Switch游戏的完整教程 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为Ni…...

【仅限大会注册用户获取】大模型版本血缘图谱自动生成工具链(含开源PoC),奇点智能大会现场演示后即刻下线

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;大模型版本管理策略&#xff1a;奇点智能大会 在2024年奇点智能大会上&#xff0c;大模型版本管理被确立为AI工程化落地的核心基础设施。与传统软件版本控制不同&#xff0c;大模型版本需同时追踪代码、…...

为什么顶尖AI产品团队正秘密重构设计系统?——AI原生用户体验的4层认知断层与SITS 2026破局公式

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生用户体验设计&#xff1a;SITS 2026交互设计新趋势 AI原生体验不再将模型能力“封装后隐藏”&#xff0c;而是让智能成为界面的第一公民——用户在输入框中键入自然语言时&#xff0c;系统实时推…...

AI原生代码审查实战手册(2026奇点大会闭门报告首次解禁)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生代码审查&#xff1a;2026奇点智能技术大会Code Review新范式 在2026奇点智能技术大会上&#xff0c;AI原生代码审查&#xff08;AI-Native Code Review&#xff09;正式取代传统人工规则引擎混合…...

不止于VWF:用Modelsim SE-64 10.4 为你的Quartus 18.1 Verilog项目做高效前仿真

超越基础工具链&#xff1a;Modelsim SE-64与Quartus 18.1深度协同仿真指南 当Verilog代码通过Quartus编译后&#xff0c;许多开发者会止步于基础功能验证。但真正的设计可靠性往往隐藏在时序边界条件和复杂状态机交互中——这正是专业仿真工具的价值所在。本文将带您突破VWF的…...