算法题-相加为目标数之和(两数之和、三数之和、从数组中取n个数相加为m(不可重复取)、从数组中取任意个数相加为m(可重复取))

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

目录

相加为目标数之和

题目

两数之和

三数之和

原题链接

解析

核心思想

答案

从数组中取n个数相加为m(不可重复取)

解析 

核心思想

答案

从数组中取任意个数相加为m(可重复取)

解析

核心思想

答案


相加为目标数之和

当为两数、三数之和时,可以通过取出一个数和目标值的差去解决问题,通常会用到hash、双指针等算法去优化题解。

当为多数之和时,我们可以采取递归的方法,把n个数和拆为n-1个数和与剩余的一个数去递归。或者用动态规范的方法,找到res[i]的解和res[i-arr[j]]的关系(j表示的是数组中的每一位)

最后需要注意在求解的时候是否会有重复的解集存在。

题目

两数之和

算法题--哈希(给定差值的组合、最小权重路径解法加步骤)_YF-SOD的博客-优快云博客

三数之和

给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。

  1. 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
  2. 解集中不能包含重复的三元组。

示例:给定的数组 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次,但数字时可以相同的。

核心思想

采用双指针的算法,首先固定一位,左右指针从两端开始,向内收紧结束,当有和为固定的数的相反数的加入解

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值