leetcode 16. 最接近的三数之和(golang)

87 阅读1分钟

16. 最接近的三数之和

给你一个长度为 n 的整数数组 nums **和 一个目标值 target。请你从 nums **中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

示例 1:

输入: nums = [-1,2,1,-4], target = 1
输出: 2
解释: 与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例 2:

输入: nums = [0,0,0], target = 1
输出: 0

提示:

  • 3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

解答:

本题和15题的三数之和其实差不多,思路也是先对数组进行排序,然后for循环遍历,再加上双指针,每一次循环如果离目标更近就更新一下res

func threeSumClosest(nums []int, target int) int {
	res := 0
	dis := math.Pow(2, 32) - 1
	sort.Ints(nums)
	for i := 0; i < len(nums); i++ {
		l, r := i+1, len(nums)-1
		for l < r {
			cur := nums[i] + nums[l] + nums[r]
			d := math.Abs(float64(target - cur))
			if d < dis {
				res = cur
				dis = d
			}
			if target-cur > 0 {
				l += 1
			} else {
				r -= 1
			}
		}
	}
	return res
}