news 2026/2/5 14:35:21

力扣解题-两数之和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣解题-两数之和

力扣解题-两数之和

题目:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]
提示:

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

Related Topics
数组
哈希表


第一次解答

解题思路

核心方法:哈希表预存全量元素 + 二次遍历查找补值,利用哈希表O(1)的平均查找效率,将时间复杂度从暴力解法的O(n²)优化至O(n)。

具体步骤:

  1. 初始化一个HashMap,用于存储数组中的「数值-对应下标」键值对,后续通过数值快速反查下标。
  2. 第一次遍历整数数组nums,将数组中所有元素的「数值」作为key、「元素下标」作为value,完整存入HashMap中(注:若存在重复数值,后遍历到的元素下标会覆盖先存入的下标,由于题目保证仅有一个有效答案,该覆盖不影响最终结果)。
  3. 第二次遍历整数数组nums,对于当前遍历到的下标i对应的元素nums[i],计算得到与之匹配的「补值」other = target - nums[i](即需要找到的另一个和为target的整数)。
  4. 校验两个核心条件:①HashMap中包含补值other(存在对应的整数);②HashMap中补值other对应的下标不等于当前下标i(避免重复使用同一个数组元素)。
  5. 若满足上述两个条件,说明找到有效答案,立即将当前下标i和补值other对应的下标封装为结果数组,终止遍历以减少无意义开销。
  6. 返回最终结果数组。

提交后耗时5ms

publicint[]twoSum(int[]nums,inttarget){int[]result=null;Map<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){map.put(nums[i],i);}for(inti=0;i<nums.length;i++){intother=target-nums[i];if(map.containsKey(other)&&map.get(other)!=i){result=newint[]{i,map.get(other)};break;}}returnresult;}

第二次解答

解题思路

核心方法:一次遍历 + 边存边查补值,在第一次解答的基础上优化遍历次数,进一步提升实际运行效率,时间复杂度仍为O(n)且执行开销更低。

具体步骤:

  1. 初始化一个HashMap,用于存储数组中的「数值-对应下标」键值对,仅存储当前遍历元素之前的数组元素。
  2. 仅进行一次遍历整数数组nums,遵循「先查补值,后存当前元素」的逻辑,避免重复匹配:
    a. 对于当前遍历到的下标i对应的元素nums[i],先计算匹配补值other = target - nums[i]
    b. 校验两个核心条件:①HashMap中包含补值other;② 补值other对应的下标不等于当前下标i(避免重复使用同一元素)。
    c. 若满足条件,直接封装当前下标i和补值other对应的下标为结果数组,终止遍历。
    d. 若不满足条件,将当前元素的「数值」和「下标」存入HashMap,继续遍历下一个元素。
  3. 返回最终结果数组。

核心优化点说明:

  • 合并两次遍历为单次遍历,减少了数组的整体访问次数,是耗时从5ms降至2ms的关键。
  • 「边存边查」仅存储前置元素,既保证了有效答案的匹配(两个答案元素必然一前一后出现),又避免了第一次解答中后续元素覆盖前置元素下标的潜在问题,逻辑更严谨。

提交后耗时2ms

publicint[]twoSum(int[]nums,inttarget){int[]result=null;Map<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){intother=target-nums[i];if(map.containsKey(other)&&map.get(other)!=i){result=newint[]{i,map.get(other)};break;}map.put(nums[i],i);}returnresult;}

总结

  1. 两次解答均采用「哈希表」实现快速查找,核心思想是「时间换空间」,将查找效率从O(n)优化至O(1),整体时间复杂度均为O(n)。
  2. 第一次解答是「预存全量元素 + 二次查找」,逻辑简单直观;第二次解答是「单次遍历 + 边存边查」,优化了遍历次数,实际运行效率更高。
  3. 两次解答均遵循「避免重复使用同一元素」的核心约束,且满足题目「任意顺序返回答案」的要求。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 14:26:13

盲盒小程序热门玩法分析(附开发者落地要点)

随着潮玩经济持续升温&#xff0c;盲盒小程序凭借轻量化、高裂变、低门槛的优势&#xff0c;成为开发者入局潮玩赛道的核心载体。其核心竞争力不在于界面设计&#xff0c;而在于“惊喜感可落地玩法技术适配”&#xff0c;热门玩法均围绕“未知性、社交性、收藏性”三大核心展开…

作者头像 李华
网站建设 2026/2/5 14:23:35

J2000与WGS84坐标及转换

摘要在遥感卫星、航天器轨道计算、导航等领域&#xff0c;WGS84 和 J2000&#xff08;J2000.0 惯性坐标系&#xff09; 是两个最常用的坐标系。它们分别属于 地固坐标系&#xff08;Earth-Fixed&#xff09; 和 惯性坐标系&#xff08;Inertial&#xff09;&#xff0c;适用于不…

作者头像 李华
网站建设 2026/2/5 14:19:17

桌面运维不想做了,还能干什么?

这是某红书平台网友分享的自己找运维工作难的从业经历&#xff01; 这两年&#xff0c;IT行业面临经济周期波动与AI产业结构调整的双重压力&#xff0c;确实有很多运维与网络工程师因企业缩编或技术迭代而暂时失业。 很多人都在提运维网工失业后就只能去跑滴滴送外卖了&#…

作者头像 李华
网站建设 2026/2/5 14:15:47

开题报告 springboot和vue家校联系管理系统

目录系统背景与需求技术选型与优势核心功能模块系统特色预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统背景与需求 随着教育信息化的发展&#xff0c;家校沟通需求日益增多。传统沟通方式&am…

作者头像 李华
网站建设 2026/2/5 14:11:12

如何正确使用AI辅助写作并通过AIGC检测?合规使用的建议

如何正确使用AI辅助写作并通过AIGC检测合规使用的建议的核心问题是什么&#xff1f;关于如何正确使用AI辅助写作并通过AIGC检测这个问题&#xff0c;我们需要从基础概念开始理解。AIGC检测技术是近年来随着AI写作工具普及而快速发展的领域&#xff0c;它的出现改变了学术界和内…

作者头像 李华
网站建设 2026/2/5 14:04:27

AIGC检测的假阳性率是多少?误判风险的客观评估

AIGC检测的假阳性率是多少误判风险的客观评估的核心问题是什么&#xff1f;关于AIGC检测的假阳性率是多少这个问题&#xff0c;我们需要从基础概念开始理解。AIGC检测技术是近年来随着AI写作工具普及而快速发展的领域&#xff0c;它的出现改变了学术界和内容创作领域对原创性的…

作者头像 李华