【LeetCode 热题100】74:搜索二维矩阵(二分、线性两种方式 详细解析)(Go 语言实现)
🚀 力扣热题 74:搜索二维矩阵(详细解析)
📌 题目描述
力扣 74. 搜索二维矩阵
给你一个满足下述两条属性的
m x n整数矩阵matrix:
- 每行中的整数从左到右按非递减顺序排列。
- 每行的第一个整数大于前一行的最后一个整数。
给你一个整数
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.lengthn == matrix[i].length1 <= m, n <= 100-10^4 <= matrix[i][j], target <= 10^4
💡 解题思路
1. 观察矩阵特性
- 矩阵每行递增,且下一行的第一个元素大于上一行的最后一个元素。
- 可以将其视为一个 一维有序数组,索引从
0到m * n - 1,然后用 二分查找 解决。
2. 方法一:二分查找
- 视整个二维数组为一维数组,使用索引
mid,计算对应的二维坐标:row = mid // n (行号) col = mid % n (列号) - 进行标准的 二分查找:
- 如果
matrix[row][col] == target,返回true。 - 如果
matrix[row][col] < target,移动左边界。 - 如果
matrix[row][col] > target,移动右边界。
- 如果
💻 Go 代码实现(方法一:二分查找)
func searchMatrix(matrix [][]int, target int) bool {if len(matrix) == 0 || len(matrix[0]) == 0 {return false}m, n := len(matrix), len(matrix[0])left, right := 0, m*n-1for left <= right {mid := (left + right) / 2row, col := mid/n, mid%nif matrix[row][col] == target {return true} else if matrix[row][col] < target {left = mid + 1} else {right = mid - 1}}return false
}
3. 方法二:逐行扫描 + 线性查找
- 遍历每一行,判断
target是否在当前行范围内(即row[0] <= target <= row[n-1])。 - 如果在范围内,则进行遍历查找。
- 适用于矩阵较小的情况,时间复杂度较高。
💻 Go 代码实现(方法二:逐行扫描)
func searchMatrix(matrix [][]int, target int) bool {for i := range matrix {num := matrix[i]if num[0] <= target && target <= num[len(num)-1] {for j := range num {if num[j] == target {return true}}}}return false
}
⏳ 复杂度分析
| 方法 | 时间复杂度 | 空间复杂度 | 适用场景 |
|---|---|---|---|
| 🚀 二分查找 | O ( log ( m × n ) ) O(\log(m \times n)) O(log(m×n)) | O ( 1 ) O(1) O(1) | 适用于大规模矩阵搜索 |
| 📌 逐行扫描 | O ( m × n ) O(m \times n) O(m×n) | O ( 1 ) O(1) O(1) | 适用于较小矩阵 |
🎯 总结
- ✅ 方法一(推荐):二分查找,时间复杂度 O ( log ( m × n ) ) O(\log(m \times n)) O(log(m×n)),适用于大规模数据。
- 📌 方法二:逐行扫描 + 线性查找,适用于数据量较小的情况。
- 💡 掌握不同方法,有助于应对不同的面试场景!
👍 如果觉得有帮助,欢迎点赞、收藏、关注哦!
相关文章:
【LeetCode 热题100】74:搜索二维矩阵(二分、线性两种方式 详细解析)(Go 语言实现)
🚀 力扣热题 74:搜索二维矩阵(详细解析) 📌 题目描述 力扣 74. 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵 matrix : 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的…...
元数据、数据元、数据元素、数据项 和 主数据的概念
一、元数据 1.概念 元数据,又称中介数据、中继数据,为描述数据的数据。主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。 2.实例 数据库中,表的名称、表字段名、其他相关的描述信息&a…...
阿里云cdn怎样设置图片压缩
阿里云 CDN 提供了图像加速服务,其中包括图像压缩功能。通过设置图片压缩,可以显著减小图片文件的体积,提升网站加载速度,同时减少带宽消耗。九河云来告诉你如何进行图片压缩吧。 如何设置阿里云 CDN 图片压缩? 1. 登…...
白话文实战Nacos(保姆级教程)
前言 上一篇博客 我们创建好了微服务项目,本篇博客来体验一下Nacos作为注册中心和配置中心的功能。 注册中心 如果我们启动了一个Nacos注册中心,那么微服务比如订单服务,启动后就可以连上注册中心把自己注册上去,这过程就是服务注册。每个微服务,比如商品服务都应该注册…...
7. 基于DeepSeek和智谱清言实现RAG问答
课件链接:https://cloud.189.cn/t/VNvmyimY7Vna(访问码:e4cb)天翼云盘是中国电信推出的云存储服务,为用户提供跨平台的文件存储、备份、同步及分享服务,是国内领先的免费网盘,安全、可靠、稳定、…...
【数据结构】双向链表(真正的零基础)
链表是一种物理存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过指针的链接来实现的!在上篇我们学习了单向链表,而单向链表虽然空间利用率高,插入和删除也只需改变指针就可以达到!但是我们在每次查找、删除、访问..…...
【生产变更】- Oracle RAC添加配置ipv6地址
【生产变更】- Oracle RAC添加配置ipv6地址 一、概述二、环境检查及备份2.1 检查并备份系统层面IP配置2.2 检查并备份监听配置2.3 检查并备份网卡配置2.4 检查并备份/etc/hosts三、集群层面配置3.1 检查集群配置3.2 停止集群组件3.3 Bond0网卡设置3.4 /etc/hosts文件配置3.5 重…...
Ai无限免费生成高质量ppt教程(deepseek+kimi)
第一步:打开deepseek官网(DeepSeek) 1.如果deepseek官网网络繁忙,解决方案如下: (1)使用easychat官网(EasyChat)使用deepseek模型,如图所示: (2)本地部署&…...
python全栈-python基础
python基础 文章目录 python基础python入门基础概念序列列表元组 -- 不可变序列字典字典的本质集合 控制语句选择结构 - 条件判断结构循环结构zip()推导式 函数及原理参数LEGB规则 面向对象私有属性和私有方法面向对象的特征重写__str__()方法super获得父类的定义特殊方法和运算…...
Python 鼠标轨迹 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
力扣 零钱兑换
完全背包,动态规划例题。 题目 这题跟完全背包跟完全平方数有点相似。在完全平方数中,用一个dp数组去取得目标金额的每一步的最优,当前状态可能来自上一个dp,也有可能比上一个dp更小,因此往回退一步加一做比较。在完全…...
C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割
在一个热闹的科技公司里,阿强是一个负责图像分析的员工。他的日常工作就是从各种复杂的图像中提取出有用的信息,可这可不是一件轻松的事情哦 最近,阿强接到了一个艰巨的任务:要从一堆嘈杂的监控图像中分离出运动的物体,…...
快速搭建 Elasticsearch 8 集群:零基础实战与升级注意事项
引言 随着大数据技术的飞速发展,Elasticsearch 成为许多应用场景中不可或缺的技术,它以其高效的全文搜索引擎和分布式存储架构在企业和个人项目中占据了一席之地。无论是在日志分析、实时搜索还是数据可视化中,Elasticsearch 都发挥着重要的作用。 在这篇文章中,我们将为…...
基于扑克牌分发效果制作时的问题总结
其基本效果如图 1. 在overlay模式下直接使用position来移动 实现代码 public class Card : MonoBehaviour {public RectTransform target;public Button cardButton;private bool isPack false;public List<RectTransform> cards new List<RectTransform>(…...
老榕树的Java专题:Redis 从入门到实践
一、引言 在当今的软件开发领域,数据的高效存储和快速访问是至关重要的。Redis(Remote Dictionary Server)作为一个开源的、基于内存的数据结构存储系统,因其高性能、丰富的数据类型和广泛的应用场景,成为了众多开发者…...
【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)
《API Testing and Development with Postman》最新第二版封面 文章目录 第十五章 API 接口性能测试1 性能负载的类型2 Postman 负载配置3 Postman 性能测试实战3.1 Fixed 型负载下的性能测试3.2 基于数据驱动的 Postman 接口性能测试 4 性能测试的注意事项 写在前面 终于来到了…...
在 Qt 开发中,可以将 QML 封装成库
在 Qt 开发中,可以将 QML 封装成库,以便在多个项目中复用 QML 组件或模块。下面通过一个简单的例子说明如何将 QML 封装成库并在其他项目中使用。 1. 创建 QML 库项目 首先,我们创建一个新的 Qt 项目,专门用于封装 QML 组件。假…...
换电脑了如何快速导出vscode里的插件
当你换电脑了,之前vscode里的插件又不想全部手动重装,那么恭喜你,刷到了这篇文章。 1. 将 VSCode 添加到系统路径 macOS 打开 VSCode。按下 Command Shift P 打开命令面板。 3。 输入 Shell Command: Install ‘code’ command in PATH …...
点大商城V2-2.6.6源码全开源uniapp +搭建教程
一.介绍 点大商城V2独立开源版本,版本更新至2.6.6,系统支持多端,前端为UNiapp,多端编译。 二.搭建环境: 系统环境:CentOS、 运行环境:宝塔 Linux 网站环境:Nginx 1.21 MySQL 5.…...
9 Pydantic复杂数据结构的处理
在构建现代 Web 应用时,我们往往需要处理复杂的输入和输出数据结构。例如,响应数据可能包含嵌套字典、列表、元组,甚至是多个嵌套对象。Pydantic 是一个强大的数据验证和序列化库,可以帮助我们轻松地处理这些复杂的数据结构&#…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
