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
}