1,15,16,18
转载自:http://www.sigmainfy.com/blog/summary-of-ksum-problems.html
方法一:暴力搜索法 时间复杂度O(n^k)
方法二:排序
2sum:采用快速排序法,排序后采用前后指针。当和为target,则找到答案返回;当和大于target,时,右指针左移;当和小于target时,左指针右移。循环上述过程,若找到则返回,否则直至left=right说明没有解。最后在原数组中找到符合要求的两个数的位置即可。
时间复杂度为O(nlogn)
3sum:采用快速排序法只排一次,每次取一个数x,问题转化为target-x的2sum问题,前后指针法时间复杂度为O(n)
时间复杂度为O(n^2)
4sum:采用快速排序法只排一次,每次取一个数x,问题转化为target-x的3sum问题
时间复杂度为O(n^3)
……
ksum:时间复杂度为O(n^(k-1))
优化:ksum每次取一个数x,只需要对x后的数进行target-x的(k-1)sum问题
除重问题:可以利用set的性质
方法三:哈希 字典{元素:索引}
2sum:如果target-元素在哈希表则返回,不在则将元素添加至哈希表
时间复杂度为O(n)
3sum:每次取一个数x,问题转化为target-x的2sum问题
时间复杂度为O(n^2)
4sum:每次取一个数x,问题转化为target-x的3sum问题
时间复杂度为O(n^3)
除重问题:无论重复元素有多少个,字典中只存放一个的索引
此时哈希表的优势就体现出来,我们可以遍历所有可能的pair,把所有的pair存在dict中,key=a+b, value是一个list,每个元素为(a, b)。时间复杂度为O(n^2)。
但是,我们不可以直接利用pair当作2sum问题,因为这样会有重复的,需要将查找到的two pairs去重
Ksum问题 (leetcode)
最新推荐文章于 2021-12-06 23:35:00 发布