18. 4Sum

def kSum(nums, target, k):
    res = []                
    if not nums: # No more range to try
        return res
           
    average_value = target // k # k more elements        
    if average_value < nums[0] or nums[-1] < average_value:
        return res

    if k == 2:
        return twoSum(nums, target)

    for i in range(len(nums)):
        if i == 0 or nums[i - 1] != nums[i]:
            for subset in kSum(nums[i + 1:], target - nums[i], k - 1):
                res.append([nums[i]] + subset)
    return res

def twoSum(nums, target):
    res, lo, hi = [], 0, len(nums) - 1

    while (lo < hi):
        curr_sum = nums[lo] + nums[hi]
        if curr_sum < target or (lo > 0 and nums[lo] == nums[lo - 1]):
            lo += 1
        elif curr_sum > target or (hi < len(nums) - 1 and nums[hi] == nums[hi + 1]):
            hi -= 1
        else:
            res.append([nums[lo], nums[hi]])
            lo, hi = lo+1, hi-1                                                        
    return res

nums.sort()
kSum(nums, target, K)















Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that:

  • 0 <= a, b, c, d < n
  • abc, and d are distinct.
  • nums[a] + nums[b] + nums[c] + nums[d] == target

You may return the answer in any order.

Comments

Popular posts from this blog

849. Maximize Distance to Closest Person

347. Top K Frequent Elements

139. Word Break