15. 三数之和
题目
给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
1 2 3 4 5 6 7
| 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
|
图解
代码
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
| func threeSum(nums []int) [][]int { var ( result [][]int mi int ri int target int li = 0 size = len(nums) )
sort.Ints(nums)
for li < size-2 && nums[li] <= 0 { target = -nums[li] mi = li + 1 ri = size - 1
for mi < ri { curmi := nums[mi] curri := nums[ri] if curmi+curri == target { result = append(result, []int{-target, curmi, curri})
for mi < ri && nums[mi] == curmi { mi++ } for mi < ri && nums[ri] == curri { ri-- }
} else if curmi+curri < target { mi++ } else { ri-- } }
for li < size-2 && -target == nums[li] { li++ } }
return result }
|