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
a
,b
,c
, andd
are distinct.nums[a] + nums[b] + nums[c] + nums[d] == target
You may return the answer in any order.
Comments
Post a Comment