前言
本题与「15. 三数之和」相似,解法也相似。
内容
一、四数之和
18.四数之和
给你一个由 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 [][]intfor 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+1right:=len(nums)-1for left<right{n3:=nums[left]n4:=nums[right]sum:=n1+n2+n3+n4if 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
}
最后
哈希表先到这吧,写个总结。