前言
本题与「15. 三数之和」相似,解法也相似。
内容
一、四数之和
给你一个由 n
个整数组成的数组 nums
,和一个目标值 target
。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]]
(若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n
a
、b
、c
和d
互不相同nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
排序+双指针
func fourSum(nums []int, target int) [][]int {
sort.Ints(nums)
n:=len(nums)
var res [][]int
for i:=0;i<n-3;i++{
n1:=nums[i]
if i>0&&n1==nums[i-1]{
continue
}
for j:=i+1;j<n-2;j++{
n2:=nums[j]
if j>i+1&&n2==nums[j-1]{
continue
}
left:=j+1
right:=len(nums)-1
for left<right{
n3:=nums[left]
n4:=nums[right]
sum:=n1+n2+n3+n4
if sum<target{
left++
}else if sum>target{
right--
}else{
res=append(res,[]int{n1,n2,n3,n4})
for left < right && n3 == nums[left+1] { // 去重
left++
}
for left < right && n4 == nums[right-1] { // 去重
right--
}
// 找到答案时,双指针同时靠近
right--
left++
}
}
}
}
return res
}
最后
哈希表先到这吧,写个总结。