diff --git a/0018/4Sum.py b/0018/4Sum.py new file mode 100644 index 0000000..f58cb8f --- /dev/null +++ b/0018/4Sum.py @@ -0,0 +1,33 @@ +# Two Pointers approach + +class Solution: + def fourSum(self, nums: List[int], target: int) -> List[List[int]]: + + def kSum(nums: List[int], target: int, k: int) -> List[List[int]]: + res = [] + if len(nums) == 0 or nums[0] * k > target or target > nums[-1] * k: + 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: List[int], target: int) -> List[List[int]]: + res = [] + s = set() + + for i in range(len(nums)): + if len(res) == 0 or res[-1][1] != nums[i]: + if target - nums[i] in s: + res.append([target - nums[i], nums[i]]) + s.add(nums[i]) + + return res + + nums.sort() + return kSum(nums, target, 4) diff --git a/0018/README.md b/0018/README.md new file mode 100644 index 0000000..75d0a07 --- /dev/null +++ b/0018/README.md @@ -0,0 +1,33 @@ +# 4Sum + +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, and d are distinct. +nums[a] + nums[b] + nums[c] + nums[d] == target +You may return the answer in any order. + + + +## Example 1: + +Input: nums = [1,0,-1,0,-2,2], + +target = 0 + +Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]] + +## Example 2: + +Input: nums = [2,2,2,2,2], + +target = 8 + +Output: [[2,2,2,2]] + + +## Constraints: + +1 <= nums.length <= 200 +-109 <= nums[i] <= 109 +-109 <= target <= 109