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

力扣解题-两数之和

力扣解题-两数之和

题目:
给定一个整数数组 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. 两次解答均遵循「避免重复使用同一元素」的核心约束,且满足题目「任意顺序返回答案」的要求。
http://www.jsqmd.com/news/345592/

相关文章:

  • YOLO26改进 - 注意力机制 _ Deformable-LKA 可变形大核注意力:自适应采样网格优化特征捕捉,提升不规则目标感知
  • 2026年河南地区灌装机源头厂家推荐,口碑好的品牌都在这 - 工业品网
  • BXMya DO630 3BHT300007R1 数字输出模块
  • 基于STC89C52单片机的智能窗帘控制系统设计
  • YOLO26改进 - 注意力机制 _ Dual-ViT 双视觉变换器:双路径建模协同全局语义与局部特征,增强多尺度感知
  • YOLO26改进 - 注意力机制 _ ELA(Efficient Local Attention)高效局部注意力:突破降维限制精准定位,增强小目标感知
  • 实战指南:基于 Apache Doris 构建企业级 RAG(检索增强生成)应用
  • BXMya DO801 3BSE020510R1 数字输出模块
  • 说说爆款植物基饮料多少钱,深圳、东莞等地这款长牛健值得关注 - 工业品牌热点
  • 探寻2026上半年大型餐饮展览,正规餐饮展览如何选择 - mypinpai
  • 高性价比庭院灯厂家 Top10 推荐,适配多场景 - 深度智识库
  • AI无感情绪监测:基于七维情绪特征与AU特征的AI心理健康服务技术实现
  • 美国加州65材料测试认证更高效:IACheck AI审核加速合规报告提交
  • 宝妈宝爸必看!童装羽绒服品牌大揭秘 - 品牌测评鉴赏家
  • 手动刀闸阀推荐厂商品牌盘点,谁家口碑好费用合理 - myqiye
  • 如何删除三星手机上的所有内容(5 种解决方案)
  • 盘点淋浴房平开门哪个厂家好,优质品牌推荐 - 工业推荐榜
  • J2000与WGS84坐标及转换
  • 2026年微信公众号排版终极指南:5个微信编辑器神操作效率翻倍 - peipei33
  • 对话中海壳牌:与上海斯歌合作许久,产品功能业界卓越
  • 家有萌娃看过来!0 - 16岁儿童鞋服品牌大揭秘 - 品牌测评鉴赏家
  • 温室大棚环境监测装置设计的实现
  • 聊聊南昌粮油批发,江西洪都大侠贸易性价比咋样费用多少 - 工业品网
  • 2026年工艺温控推荐品牌清单(含进口与国产) - 品牌推荐大师1
  • 实测避坑|2026儿童鞋服测评推荐,宝妈必藏的全年龄段选购指南 - 品牌测评鉴赏家
  • 计算机毕业设计hadoop+spark+hive在线教育可视化 课程推荐系统 大数据毕业设计(源码+LW文档+PPT+讲解)
  • 建议收藏|AI论文工具,千笔·专业论文写作工具 VS speedai,专科生专属利器!
  • 盘点2026年渭南好用的职业无人机技术学校Top10 - 工业设备
  • C# 调用WGC 实现桌面屏幕的捕获
  • react native创建强大的方案常用插件