【数据结构与算法】【leetcode】sum2 sum3 sum4 Combination Sum

这篇博客详细介绍了如何解决LeetCode中关于求和的组合问题,包括求2个、3个和4个元素之和等于目标值的解题方法。解题策略主要采用双指针技术,通过排序数组,根据和与目标值的关系调整指针位置。对于sum2问题,提供了两种解决方案,一种是利用集合缓存,另一种是双指针。而对于sum3和sum4问题,分别使用了一层循环和两层循环的方法。此外,还提到了一个更一般性的组合求和问题,该问题允许每个数组元素重复使用,解决方案采用了递归的方式。
摘要由CSDN通过智能技术生成

【题目】:

输入:int[]nums int target
输出:符合要求的所有情况
给定一个int类型的数组,sum2、sum3、sum4分别输出2、3、4个元素的和为target的所有结果,不能重复,并且结果从小到大排序。

【解法】:
三个题目均可以使用双指针的做法。首先对原始数组进行排序,排序的意义为:(1)保证最后结果的有序性;(2)从小到大的查找是否满足target,若小于他,则start指针往前走,若大于他,这end指针往回走;
接着第一个指针从最小的元素开始,第二个指针从最大的元素开始,通过对和与target进行比较,判断start和end的走向。
sum2可以不用循环,只需要两个指针。同时sum2还可以有另一种解法,从左到右判断,采用一个集合保存判断过的结果,从集合中查找target-nums[i]是否存在;(n)
sum3采用一层循环,start从循环处的下一个元素开始(n`2)

sum4采用两层循环,第二层循环从第一层循环的i值开始,最内部start从第二层循环的下一个元素开始。(n`3)
***************************************sum2******************************************************************
方法1,采用map对

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值