1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| package main
import "sort"
func fourSum(nums []int, target int) [][]int { sort.Ints(nums) n := len(nums) result := [][]int{} if n < 4 { return result }
for i := 0; i < n-3; i++ { if i > 0 && nums[i] == nums[i-1] { continue } if nums[i]+nums[i+1]+nums[i+2]+nums[i+3] > target { break } if nums[i]+nums[n-3]+nums[n-2]+nums[n-1] < target { continue }
for j := i + 1; j < n-2; j++ { if j > i+1 && nums[j] == nums[j-1] { continue } if nums[i]+nums[j]+nums[j+1]+nums[j+2] > target { break } if nums[i]+nums[j]+nums[n-2]+nums[n-1] < target { continue }
left, right := j+1, n-1 for left < right { sum := nums[i] + nums[j] + nums[left] + nums[right] if sum == target { result = append(result, []int{nums[i], nums[j], nums[left], nums[right]}) for left < right && nums[left] == nums[left+1] { left++ } for left < right && nums[right] == nums[right-1] { right-- } left++ right-- } else if sum < target { left++ } else { right-- } } } } return result }
|