力扣第一题 两数之和扩展版
题目
在《力扣第一题 两数之和》中,我们给出了三种求解力扣第一题两数之和的方法,这里给出一个它的升级版:找出所有两数之和为target的数组下标。
力扣第一题 两数之和扩展版:给定一个元素个数为N的整数数组 nums 和一个整数目标值 target,请在该数组中找出所有和为 target 的那两个整数,并返回它们的数组下标。假设可以按任意顺序返回答案。但是,数组中同一个元素在答案里不能重复出现。
基于哈希表找出所有两数之和
首先定义一个对象 Map<String, Integer> map,key为一个由英文逗号分隔的、任意两个数的下标组成的字符串,value为两数之和。然后,遍历数组,将任意两数之和存入map。最后,遍历map,如果value等于target,则返回其key,这个key就是我们想要的数组下标。答案基于《力扣第一题 两数之和》的第三种解法,稍作重构即可,代码如下:
/**
* 二次遍历map,为求解所有两数之和等于target的整数做铺垫
* @param nums
* @param target
* @return
*/
public static List<String> allSolution(int[] nums, int target) {
Map<String, Integer> map = new HashMap<>();
for (int i = 0, len = nums.length; i < len; i++) {
int numI = nums[i];
for (int j = i + 1; j < len; j++) {
map.put(i + "," + j, numI + nums[j]);
}
}
// 保存结果集
List<String> rets = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == target) {
rets.add(entry.getKey());
}
}
return rets;
}
复杂度分析
-
时间复杂度:O(N^2))。最坏情况下数组中任意两个数都要被匹配一次。
-
空间复杂度:O(N)。
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-06-05 Mybatis 批量操作-删除、修改和查询