如何在数组中找到和为“特定值”的三个数?
程序员小灰
尝试在数组中找到和为“特定值”的三个数 。
题目的具体要求是什么呢?给定下面这样一个整型数组:
文章插图
我们随意选择一个特定值 , 比如13 , 要求找出三数之和等于13的全部组合 。
由于5+6+2=13 ,5+1+7=13 , 3+9+1=13 , 所以最终的输出结果如下:
【5 ,6 , 2】
【5 ,1 , 7】
【3 ,9 , 1】
文章插图
文章插图
小灰的思路 , 是把原本的“三数之和问题” , 转化成求n次“两数之和问题” 。
文章插图
我们以上面这个数组为例 , 选择特定值13 , 演示一下小灰的具体思路:
第1轮 , 访问数组的第1个元素5 , 把问题转化成从后面元素中找出和为8(13-5)的两个数:
文章插图
如何找出和为8的两个数呢?按照上一次所讲的 , 我们可以使用哈希表高效求解:
文章插图
第2轮 , 访问数组的第2个元素12 , 把问题转化成从后面元素中找出和为1(13-12)的两个数:
文章插图
第3轮 , 访问数组的第3个元素6 , 把问题转化成从后面元素中找出和为7(13-6)的两个数:
文章插图
以此类推 , 一直遍历完整个数组 , 相当于求解了n次两数之和问题 。
文章插图
public static List
在上面的代码中 , 每一轮解决“两数之和问题”的时间复杂度是O(n) , 一共迭代n轮 , 所以该解法总的时间复杂度是O(n2) 。> threeSum(int[] nums, int target) {List
> resultList = new ArrayList<>();for (int i = 0; i < nums.length; i++) {Map
至于空间复杂度 , 同一个哈希表被反复构建 , 哈希表中最多有n-1个键值对 , 所以该解法的空间复杂度是O(n) 。
文章插图
文章插图
文章插图
文章插图
我们仍然以之前的数组为例 , 对数组进行升序排列:
文章插图
- 阿里女员工:30还单身,感觉这辈子难找到对象,网友:要求高了
- 如何找到手机录屏功能?这3种一键打开的方法,值得学习一下
- 如何在短时间内快速成为软件开发专家
- 如何在 Ubuntu 上安装深度(Deepin)桌面环境
- 移动售货机器人,如何在商业综合体找到布局点,做到收益最大化?
- 数据科学高峰论坛在深召开,探讨剥开数据找到经济逻辑
- 如何在Mac上重建Spotlight索引?
- 如何在6分钟内创建1款HoloLens应用??
- 分享头条面试题,是不是又凉了呢
- 实体店纷纷“倒闭”的原因找到了,别错怪电商,和这3个原因有关