kSum问题的总结


    kSum问题是一类题型,常见的有2Sum,3Sum,4Sum等。这篇博文就来总结一些kSum问题的解法,以及对应的时间复杂度。


    1. 2Sum

    在一个给定的数组nums中,寻找和为定值target的两个数。
    【解法1】:把数组排序,然后使用two pointers的方法来求解。时间复杂度分析:排序O(nlogn),两指针遍历O(n),总体O(nlogn).
    【解法2】:先遍历一遍,把整个数组存入到hash_map中,key是每个数,value是出现的次数。然后再遍历一次,每次取查找hasp_map中是否有target-nums[i]。建立hash_map的时间复杂度是O(n),第二次遍历时 每个查找为O(1),所以查找全部也是O(n),总体为O(n)。注意:如果数组中有重复的数,比如{1, 5, 3, 3}, target=6,那么我们在查找的时候就要考虑3的情况,正是因为数组中有两个3,我们才能返回,此时key=3是的value=2就起到了作用。这就是为什么我们前面要记录value的原因。

    总的来说,2Sum的最好时间复杂度是O(n)。
    
    代码:http://blog.csdn.net/puqutogether/article/details/41775343

    2. 3Sum

    在一个给定的数组nums中,寻找和为定值target的三个数。
    【解法1】:固定其中的一个数a,问题便转换为寻找2Sum,新的target为target-a。时间复杂度为O(nlogn + n^2)=O(n^2)。
    【解法2】:依然是固定其中一个数,之后使用hash_map的做法,时间复杂度还是O(n*n)=O(n^2)。
 
    总体的最好的时间复杂度是O(n^2)。

    3. 4Sum

    一个给定的数组nums中,寻找和为定值target的三个数。
    【解法1】:使用不断固定的思想,最后转化成2Sum问题,时间复杂度为O(n^3).
    【解法2】:既然前面的hash_map的思路展示出优势,那么我们就直接使用hash_map来解决。
                      首先,遍历所有可能的pair,把所有的pair存在hash_map中,key=a+b, value是一个list,每个元素为(a, b)。时间复杂度为O(n^2),为啥是pair呢?因为后面要查找的是pair。
                      然后,两个循环for遍历所有的可能值c和d,O(n^2),每种情况下都需要查找target-c-d,此时,这个差值就是我们hash_map中的key,如果发现有pair满足要求即返回。
                      时间复杂度为O(n^2*logn),因为list的查找至少要O(logn)。所以,解法2的总体时间复杂度为O(n^2logn)。

    4. kSum

    关于kSum问题,我们一样可以使用上述解法1的思路,这样的时间复杂度为O(n^(k-1))。也可以使用hash_map的思路,这样子会更快。具体的时间复杂度分析较复杂,参考如下:

k -SUM can be solved more quickly as follows.

  • For even  k : Compute a sorted list  S  of all sums of  k/2  input elements. Check whether  S contains both some number  x  and its negation  x . The algorithm runs in  O(nk/2logn)  time.

  • For odd  k : Compute the sorted list  S  of all sums of  (k1)/2  input elements. For each input element  a , check whether  S  contains both  x  and  ax , for some number  x . (The second step is essentially the  O(n2) -time algorithm for 3SUM.) The algorithm runs in  O(n(k+1)/2)  time.

Both algorithms are optimal (except possibly for the log factor when  k  is even and bigger than  2 ) for any constant  k  in a certain weak but natural restriction of the linear decision tree model of computation. For more details, see:


参考链接:
http://cs.stackexchange.com/questions/2973/generalised-3sum-k-sum-problem.
http://blog.csdn.net/doc_sgl/article/details/12462151


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值