18. 4Sum
# Medium
class Solution(object):
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
# edge case
if len(nums) < 4:
return []
# regular case
result = set()
nums2 = sorted(nums)
for i in range(len(nums2)-3):
if i > 0 and nums2[i] == nums2[i-1]:
continue
for j in range(i+1, len(nums2)-2):
if j > i+1 and nums2[j] == nums2[j-1]:
continue
z = j + 1
k = len(nums2) - 1
while z < k:
s = nums2[i] + nums2[j] + nums2[z] + nums2[k]
if s == target:
temp = (nums2[i], nums2[j], nums2[z], nums2[k])
result.add(temp)
z += 1
k -= 1
elif s > target:
k -= 1
else:
z += 1
return result
Time complexity = , space complexity = .
It can be extended to kSum problem. Time complexity =
Last updated
Was this helpful?