0016.最接近的三数之和
方法一:排序 + 双指针
时间复杂度 $O(n^2)$,空间复杂度 $O(1)$。
func threeSumClosest(nums []int, target int) int {
sum, n := 1<<31-1, len(nums)
sort.Ints(nums)
for i := 0; i < n; i++ {
for left, right := i+1, n-1; left < right; {
if nums[i]+nums[left]+nums[right] >= target {
if nums[i]+nums[left]+nums[right]-target < abs(sum-target) {
sum = nums[i] + nums[left] + nums[right]
}
right--
} else {
if target-(nums[i]+nums[left]+nums[right]) < abs(sum-target) {
sum = nums[i] + nums[left] + nums[right]
}
left++
}
}
}
return sum
}
func abs(x int) int {
if x < 0 {
return -1 * x
}
return x
}