力扣链接:https://leetcode-cn.com/probl...
解题思路:
- 这道题的解题思路跟三数之和相同,都是:排序+双指针
- 首先将数组排序,然后初始化三数之和为数组的前三个元素
- 然后标的i第一个数字开始遍历,如果遇到相同的数字就跳过,后两位数字为双指针,分别是i后的第一个数字和数组的最后一个数字
当两个指针相遇之前,计算三个数的和,记录跟target绝对值最小的和,如果想等直接返回
func threeSumClosest(nums []int, target int) int { sort.Ints(nums) n, closeSum := len(nums), nums[0] + nums[1] + nums[2] for i := 0; i < n - 2; i++ { if i > 0 && nums[i] == nums[i-1] { continue } j, k := i+1, n-1 for j < k { sum := nums[i] + nums[j] + nums[k] if sum == target { return target } if abs(closeSum - target) > abs(sum - target) { closeSum = sum } if sum > target { k-- } else { j++ } } } return closeSum } func abs(x int) int { if x > 0 { return x } return -x }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。