【发布时间】:2020-08-22 02:16:29
【问题描述】:
这是来自 Leetcode 的问题。我根据 3Sum 问题的思想推导出了这个解决方案。
问题是:
给定一个由 n 个整数组成的数组 nums 和一个整数目标,在 nums 中是否存在元素 a、b、c 和 d 使得 a + b + c + d = target?找出数组中所有唯一的四元组,给出目标的总和。
例如
Given array nums = [1, 0, -1, 0, -2, 2], and target = 0.
A solution set is:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
我的解决方案。
class Solution(object):
def fourSum(self, nums, target):
answer = []
nums.sort()
for i in range(len(nums)-3):
# print('node 1')
for j in range(i+1,len(nums)-2):
# print('node 2')
k,w = j+1,len(nums)-1
while k < w:
sum = nums[i]+nums[j]+nums[k]+nums[w]
if sum == target and [nums[i],nums[j],nums[k],nums[w]] not in answer:
answer.append([nums[i],nums[j],nums[k],nums[w]])
if sum > target:
w-=1
else:
k+=1
return answer
但是算法的速度并不理想。
可以做一些小的改变来加速算法吗?
这段代码有冗余吗? 谢谢
【问题讨论】:
-
你需要的最小时间复杂度是多少?
-
还有一件事,我想让你发布一些测试用例。谢谢!
-
@Ava 我目前正在做一个 O(n3) 算法。这是我能想到的最好的了。你是对的,我放了一个测试样本
-
@Leo 不,你目前是 O(n^6)。请参阅我的更新答案。