18. 四数之和
难度中等
给定一个包含 n 个整数的数组 nums
和一个目标值 target
,判断 nums
中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target
相等?找出所有满足条件且不重复的四元组。
注意:答案中不可以包含重复的四元组。
示例 1:
输入:nums = [1,0,-1,0,-2,2], target = 0 输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2:
输入:nums = [], target = 0 输出:[] 解法 与三数之和解法相同 1.注意定义两个固定下标,如 n1 , n2 2.注意去重操作看注释
func fourSum(nums []int, target int) [][]int { if len(nums) < 4 { return nil } sort.Ints(nums) res := [][]int{} for i := 0 ; i < len(nums) -3 ; i++ { // 取重操作 if i > 0 && nums[i] == nums[i-1] { continue } // 取重 for j := i+1 ; j < len(nums)-2 ; j++ { if j > i+1 && nums[j] == nums[j-1] { continue } l,r := j+1,len(nums) - 1 for l < r { n1 , n2 , n3 , n4 := nums[i] ,nums[j] , nums[l] , nums[r] if n1 + n2 + n3 + n4 < target { l++ } else if n1 + n2 + n3 + n4 > target { r-- } else if n1 + n2 + n3 + n4 == target { res = append(res,[]int{n1,n2,n3,n4}) // 取重 for l < r && n3 == nums[l+1] { l++ } // 取重 for l < r && n4 == nums[r-1] { r-- } // 两个指针中间夹逼,求下一次 nums == target 的值 l++ r-- } } } } return res }