【Leetcode】15. 三数之和
- 题目链接
- 思路
- 代码
题目链接
【Leetcode】15. 三数之和
思路
排序+双指针+去重
代码
func threeSum(nums []int) [][]int {// 切片升序排序sort.Slice(nums, func(i, j int) bool {return nums[i] < nums[j]})// 结果切片ans := [][]int{}n := len(nums)// 枚举第一个位置for i := 0; i < n-2; i++ {// 如果枚举的第一个数字 已经 > 0,则不存在符合条件的结果if nums[i] > 0 {break}// 对第一个数字相等的情况进行去重if i > 0 && nums[i] == nums[i-1] {continue}// 双指针l, r := i+1, n-1for l < r {// 当前的总和sum := nums[i] + nums[l] + nums[r]// 如果总和=0,则符合条件if sum == 0 {// 添加进结果数组ans = append(ans, []int{nums[i], nums[l], nums[r]})// 对第二个数字进行去重for l < r && nums[l] == nums[l+1] {l++}// 对第三个数字进行去重for l < r && nums[r] == nums[r-1] {r--}// 第二个数字跟第三个数字的指针移动l++r--} else if sum < 0 {l++} else {r--}}}return ans
}