4sum

# *- 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)

        


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值