题目描述
方法:
1. 两重遍历+双指针
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
n = len(nums)
res = []
for i in range(n):
for j in range(i+1, n):
l = j+1
r = n-1
t = target - nums[i] - nums[j]
while l < r:
if nums[l]+nums[r]>t:
r -= 1
elif nums[l]+nums[r]<t:
l += 1
else:
if [nums[i], nums[j], nums[l], nums[r]] not in res:
res.append([nums[i], nums[j], nums[l], nums[r]])
l += 1
r -= 1
return res
2. 优化代码,不用not in判别(复杂度高),每次下标变化检查是否和上次相等
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
n = len(nums)
res = []
for i in range(n):
if i > 0 and nums[i] == nums[i-1]:
continue
for j in range(i+1, n):
if j>i+1 and nums[j] == nums[j-1]:
continue
l = j+1
r = n-1
t = target - nums[i] - nums[j]
while l < r:
if nums[l]+nums[r]>t:
r -= 1
elif nums[l]+nums[r]<t:
l += 1
else:
# if [nums[i], nums[j], nums[l], nums[r]] not in res:
# res.append([nums[i], nums[j], nums[l], nums[r]])
res.append([nums[i], nums[j], nums[l], nums[r]])
while l < n:
l += 1
if not(l < n and nums[l] == nums[l-1]):
break
while r > j:
r -= 1
if not(r > j and nums[r] == nums[r+1]):
break
return res