目录
相加为目标数之和
当为两数、三数之和时,可以通过取出一个数和目标值的差去解决问题,通常会用到hash、双指针等算法去优化题解。
当为多数之和时,我们可以采取递归的方法,把n个数和拆为n-1个数和与剩余的一个数去递归。或者用动态规范的方法,找到res[i]的解和res[i-arr[j]]的关系(j表示的是数组中的每一位)
最后需要注意在求解的时候是否会有重复的解集存在。
题目
两数之和
算法题--哈希(给定差值的组合、最小权重路径解法加步骤)_YF-SOD的博客-优快云博客
三数之和
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
- 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
- 解集中不能包含重复的三元组。
示例:给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, -10, 20),(-10, 0, 10)
输入:[0]
返回值:[]
输入:[0,0,0]
返回值:[[0,0,0]]
输入:[-2,0,1,1,2]
返回值:[[-2,0,2],[-2,1,1]]
输入:[-10,0,10,20,-10,-40]
返回值:[[-10,-10,20],[-10,0,10]]
原题链接
解析
注意第二个示例,输入3个零返回的数组中由零构成,上面的不包含重复的三元组是指的数组中的每一位在一个解集中只可以出现1次,但数字时可以相同的。
核心思想
采用双指针的算法,首先固定一位,左右指针从两端开始,向内收紧结束,当有和为固定的数的相反数的加入解

文章主要介绍了如何使用哈希、双指针以及递归、动态规划的方法解决数组元素相加为目标数的问题,包括两数之和、三数之和以及从数组中取n个或任意个数相加为m的算法。提供了具体代码实现,包括不可重复取和可重复取的情况。
最低0.47元/天 解锁文章
272

被折叠的 条评论
为什么被折叠?



