题目:
题解:
func threeSum(nums []int) [][]int {n := len(nums)sort.Ints(nums)ans := make([][]int, 0)// 枚举 afor first := 0; first < n; first++ {// 需要和上一次枚举的数不相同if first > 0 && nums[first] == nums[first - 1] {continue}// c 对应的指针初始指向数组的最右端third := n - 1target := -1 * nums[first]// 枚举 bfor second := first + 1; second < n; second++ {// 需要和上一次枚举的数不相同if second > first + 1 && nums[second] == nums[second - 1] {continue}// 需要保证 b 的指针在 c 的指针的左侧for second < third && nums[second] + nums[third] > target {third--}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if second == third {break}if nums[second] + nums[third] == target {ans = append(ans, []int{nums[first], nums[second], nums[third]})}}}return ans
}