# *- coding:utf-8 -*
'''
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target?
Find all unique quadruplets in the array which gives the sum of target.
Note: The solution set must not contain duplicate quadruplets.
For example, given array S = [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):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
res=[]
len_n=len(nums)
if len_n < 4 :
return res
nums=sorted(nums)
for i in range(0,len_n-3):
if i>0 and nums[i]==nums[i-1]:
continue
if sum(nums[i:i+4]) > target :
break
if nums[i]+sum(nums[-3:])<target:
continue
for j in range(i+1,len_n-2):
if j>i+1 and nums[j]==nums[j-1]:
continue
if nums[i]+sum(nums[j:j+3]) > target:
break
if nums[i]+nums[j]+sum(nums[-2:]) < target:
continue
left=j+1
right=len_n-1
while left<right:
sum_r=nums[left]+nums[right]+nums[i]+nums[j]
if sum_r < target:
left+=1
elif sum_r > target:
right-=1
else:
res.append([nums[i],nums[j],nums[left],nums[right]])
while left<right and nums[left]==nums[left+1]:
left+=1
left+=1
while left<right and nums[right]==nums[right-1]:
right-=1
right-=1
return res
my_res=Solution()
nums= [-1,0,-5,-2,-2,-4,0,1,-2]
target=-9
print my_res.fourSum(nums,target)
4sum
最新推荐文章于 2020-10-05 08:01:31 发布