LeetCode 热题 100——day1两数之和
✨ 把代码写进星轨用逻辑丈量宇宙。导航链接个人主页 星轨初途基础语言专栏 C语言 、 数据结构C 进阶专栏 C学习竞赛类 、⚙️ C专栏开发类刷题实战专栏 算法及编程题分享 、 力扣每日刷题分享文章目录两数之和题目链接方法一暴力枚举复杂度分析代码实现方法二哈希表复杂度分析代码实现方法三排序 双指针复杂度分析代码实现总结两数之和题目链接LeetCode两数之和方法一暴力枚举最直接的思路是使用两层循环枚举数组中所有不同的下标组合(i, j)。对于每一组下标判断nums[i]nums[j]target如果条件成立就返回这两个元素的下标。这种方法不需要额外的数据结构代码比较容易理解但当数组长度较大时执行效率较低。复杂度分析时间复杂度O(N^2)需要枚举所有可能的下标组合空间复杂度O(1)只使用了少量额外变量。代码实现classSolution{public:vectorinttwoSum(vectorintnums,inttarget){intnnums.size();intl-1,r-1;for(inti0;in;i){for(intji1;jn;j){if(nums[i]nums[j]target){li,rj;break;}}}return{l,r};}};方法二哈希表对于当前元素nums[i]我们需要寻找的另一个数为target-nums[i]我原本还想使用数组记录每个数是否出现但题目中的数值范围比较大并且还可能出现负数直接开数组会造成大量空间浪费。因此可以使用哈希表保存已经遍历过的元素及其下标数值-下标遍历数组时先检查哈希表中是否已经存在target - nums[i]如果存在说明已经找到了答案如果不存在就将当前元素和下标存入哈希表。需要注意必须先查找再插入当前元素避免同一个元素被使用两次。复杂度分析时间复杂度O(N)每个元素只需要进行一次哈希表查找和插入空间复杂度O(N)最坏情况下需要将所有元素存入哈希表。代码实现classSolution{public:vectorinttwoSum(vectorintnums,inttarget){unordered_mapint,intcnt;intl-1,r-1;for(inti0;inums.size();i){if(cnt[target-nums[i]]){li,rcnt[target-nums[i]]-1;}cnt[nums[i]]i1;//以免查找时cnt[target-nums[i]]0无法判断是没有还是下标为0}return{l,r};}};也使用find()判断目标值是否存在可以避免operator[]在查找时自动向哈希表中插入新的键值对。方法三排序 双指针原数组是无序的因此不能直接使用双指针。我们可以先将每个元素的数值和它在原数组中的下标绑定在一起pair数值,原下标然后按照数值从小到大排序。排序完成后设置两个指针l指向当前最小的元素r指向当前最大的元素。计算num[l].firstnum[r].first根据计算结果移动指针如果两数之和大于target说明当前和太大需要让右指针左移如果两数之和小于target说明当前和太小需要让左指针右移如果两数之和等于target返回两个元素在原数组中的下标。因为排序会改变元素原来的位置所以必须额外保存每个元素的原下标。复杂度分析时间复杂度O(NlogN)主要开销来自排序空间复杂度O(N)需要额外保存元素数值及其原下标。代码实现classSolution{public:vectorinttwoSum(vectorintnums,inttarget){// first 保存元素值second 保存元素原下标vectorpairint,intnum(nums.size());for(inti0;inums.size();i){num[i].firstnums[i];num[i].secondi;}// pair 默认优先按照 first 从小到大排序sort(num.begin(),num.end());intl0;intrnum.size()-1;while(lr){intsumnum[l].firstnum[r].first;if(sumtarget){// 当前和太大右指针左移--r;}elseif(sumtarget){// 当前和太小左指针右移l;}else{// 返回两个元素在原数组中的下标return{num[l].second,num[r].second};}}return{};}};这种方法通过排序将问题转换成了有序数组中的双指针查找。总结方法核心思路时间复杂度空间复杂度暴力枚举使用两层循环枚举所有下标组合判断两数之和是否等于targetO(N^2)O(1)哈希表遍历数组时使用哈希表查找target - nums[i]是否已经出现O(N)O(N)排序 双指针保存元素原下标并排序然后使用左右双指针逐渐逼近目标值O(NlogN)O(N)三种方法各有特点暴力枚举思路最直接也是最好想到哈希表时间复杂度最低排序 双指针能够帮助我们理解双指针算法的使用前提和移动规律。在实际刷题时可以先写出暴力解法再根据题目数据范围考虑使用哈希表或双指针进行优化。

相关新闻

电赛电源驱动电路设计:从晶体管到H桥的实战指南

电赛电源驱动电路设计:从晶体管到H桥的实战指南

最近在准备电赛,特别是电源类题目时,发现很多同学在驱动电路设计上容易卡壳。无论是驱动电机、LED还是MOS管,一个稳定可靠的驱动电路往往是整个系统成败的关键。网上资料虽然多,但要么过于理论,要么零散不成体系&#…

2026/8/3 2:38:07阅读更多 →
智能车电磁导航传感器设计:从LC谐振电路到位置解算实战

智能车电磁导航传感器设计:从LC谐振电路到位置解算实战

1. 项目概述:电磁杆在智能车竞赛中的核心地位最近在准备第二十一届全国大学生智能车竞赛,和几个学弟学妹交流时,发现他们对于“电磁杆”这个核心传感器组件,理解上存在不少模糊地带。有人把它简单等同于一个能检测磁场的“天线”&…

2026/8/3 2:38:02阅读更多 →
顺德区消防系统维修哪家好

顺德区消防系统维修哪家好

在顺德区,完善可靠的消防系统维修服务对于各类场所来说至关重要。但不少人在选择消防维修公司时,会遇到各种痛点。下面为你介绍顺港消防,能有效解决这些问题。消防维保响应慢,设备故障处理不及时很多消防维保公司响应不及时&#…

2026/8/3 2:38:02阅读更多 →
FreeRTOS 进阶补充:时基、内核中断与任务切换底层梳理

FreeRTOS 进阶补充:时基、内核中断与任务切换底层梳理

初学 FreeRTOS 的时候,大部分人都是从「移植 创建任务」入门,能把业务拆成几个任务跑起来就觉得够用了。但真遇到死机、延时不准、栈溢出这类问题时,又会因为不懂底层逻辑抓瞎。整理了几个新手容易忽略的核心补充知识点,从系统时…

2026/8/3 5:54:14阅读更多 →
长辈录音整理听不清写不完?数字化助老录音转文字帮你梳理

长辈录音整理听不清写不完?数字化助老录音转文字帮你梳理

针对长辈录音整理听不清、手动整理写不完的问题,使用支持方言识别的AI录音转文字工具即可高效解决。适合需要整理长辈口述、就医、访谈类音视频素材的内容创作者。关键依据是目前主流AI工具支持十几种中文方言识别,转写速度远快于人工。不适合需要100%无…

2026/8/3 5:54:14阅读更多 →
网页转PDF技术全解析:从原理到Puppeteer实战

网页转PDF技术全解析:从原理到Puppeteer实战

1. 项目概述:为什么网页转PDF是个技术活?你可能觉得,把网页保存成PDF是件再简单不过的事——不就是点一下浏览器的“打印”然后选择“另存为PDF”吗?我最初也是这么想的,直到有一次,我需要把一个包含复杂交…

2026/8/3 5:54:14阅读更多 →
FreeRTOS如何巧妙运用PendSV与SVC

FreeRTOS如何巧妙运用PendSV与SVC

FreeRTOS、RTX 和 RT-Thread 并非都使用 SVC 或 PendSV 异常。它们对 ARM Cortex-M 内核系统异常的使用策略存在显著差异,这直接关系到其系统调用实现、中断延迟和可移植性。 RTOS系统调用实现PendSV 使用场景SVC 使用场景关键区别与影响FreeRTOS混合模式。早期版本…

2026/8/3 5:54:14阅读更多 →
细胞骨架蛋白VIM的结构功能与疾病治疗研究

细胞骨架蛋白VIM的结构功能与疾病治疗研究

1. 细胞骨架协调蛋白VIM的生物学意义细胞骨架是维持细胞形态和功能的关键结构网络,而波形蛋白(Vimentin, VIM)作为III型中间纤维蛋白家族的核心成员,在细胞骨架动态调控中扮演着中枢协调者的角色。不同于微管和微丝,VI…

2026/8/3 5:54:14阅读更多 →
国产化数据中台全栈适配与性能优化实践

国产化数据中台全栈适配与性能优化实践

1. 项目背景与核心价值AllData数据中台在信创环境下的国产化适配,标志着企业级数据基础设施自主可控的重要突破。这个项目最让我兴奋的点在于:它首次实现了从底层硬件(海光CPU)、操作系统(麒麟)、到数据库&…

2026/8/3 5:52:14阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →