【发布时间】:2021-07-16 15:03:44
【问题描述】:
这是我遇到的问题,问题是从长度为 N 的数组 nums 中找出长度为 4 的可能组合,其总和必须等于给定的目标。
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
from itertools import combinations
comb=list(itertools.combinations(nums, 4))
lst=[]
for i in list(comb):
i=sorted(i)
if i not in lst and sum(i)==target:
lst.append(i)
return lst
我写了上面的代码,但它显示它超过了时间限制,有人可以帮我解决这个问题吗?
[-497,-480,-477,-470,-452,-448,-440,-412,-390,-381,-372,-372,-369,-366,-355,-346,-340,-337,-322,-321,-311,-296,-258,-249,-248,-232,-215,-199,-174,-154,-128,-122,-122,-117,-115,-113,-110,-89,-86,-84,-78,-71,-69,-53,-49,-35,-25,-21,-7,3,7,21,25,30,47,52,81,84,87,91,96,157,161,167,178,184,210,217,228,236,274,277,283,286,290,301,302,341,352,354,361,367,384,390,412,421,458,468,483,484,486,487,490,491]
target: 8377
这是最后执行的测试用例。
【问题讨论】:
-
您的算法——遍历所有可能的组合并找到有效的组合——效率低下。你需要为每个列表遍历
nC4组合,这很快就会变大(100C4 是 390 万)。练习的重点是提出一个有效的算法。如果您遇到困难,请寻找一些解释更有效算法如何工作的教程。这是一个:geeksforgeeks.org/… -
预期结果是空列表吗?由于案例中最大值为497,所以无法达到8377。
标签: python python-3.x list combinations itertools