题目大意:在一个数字序列中找出不重复的四个元素,使得它们的和等于目标值target
题目分析:本题和LeetCode15 三数之和思路基本相同,只要设置两重循环,先固定前两个数,后两个数的话,只要分别用两个指针指向剩余元素的一头一尾,若当前的和比target大,则后面的指针前移;若当前的和比target小,则前面的指针后移;相等的话,就保存一下。因为结果不能有重复,所有在多处需要去重。去重的思路和LeetCode 15是一样的。
代码展示:
class Solution:
def fourSum(self, nums, target):
result = []
nums.sort()
for i in range(0,len(nums)-3):
if i>0 and nums[i]==nums[i-1]:
continue
for j in range(i+1,len(nums)-2):
if j>i+1 and nums[j]==nums[j-1]:
continue
p = j+1
q = len(nums)-1
while p<q:
temp = nums[i]+nums[j]+nums[p]+nums[q]
if temp<target:
p += 1
elif temp>target:
q -= 1
else:
result.append([nums[i],nums[j],nums[p],nums[q]])
while p<q and nums[p]==nums[p+1]:
p += 1
while p<q and nums[q]==nums[q-1]:
q -= 1
p += 1
q -= 1
return result