给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3 -10^3 <= nums[i] <= 10^3 -10^4 <= target <= 10^4
了解昨天三数之和的话,这道题应该也会有思路,同样适用双指针解法。
此题的算法思路如下:
//go
func threeSumClosest(nums []int, target int) int {
sort.Ints(nums) // 排序
length := len(nums)
ans := nums[0] + nums[1] + nums[2]
for i := 0; i < length; i++ {
l, r := i+1, length-1
for l < r {
sum := nums[i] + nums[l] + nums[r]
if AbsInt(target-sum) < AbsInt(target-ans) {
ans = sum
}
if sum < target {
l++
} else if sum > target {
r--
} else {
return ans
}
}
}
return ans
}
func AbsInt(x int) int {
if x < 0 {
return -x
}
return x
}
地址:https://mp.weixin.qq.com/s/vg7Va9D0U-Op44x4teMm9w
原文:https://www.cnblogs.com/smallleiit/p/13395214.html