申明:本文只用做自己学习记录
题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
代码
func threeSumClosest(nums []int, target int) int {
//初始化结果值
result := nums[0] + nums[1] + nums[2]
//冒泡法排序
for i := 0; i < len(nums); i++ {
for j := 0; j < len(nums)-1-i; j++ {
if nums[j] > nums[j+1] {
nums[j], nums[j+1] = nums[j+1], nums[j]
}
}
}
//搜索最优值
for i := 0; i < len(nums)-2; i++ {
//初始化左右索引值
left, right := i+1, len(nums)-1
//设置循环结束条件
for left < right {
//存储中间变量
temp := nums[i] + nums[left] + nums[right]
//如果大于目标值,说明右索引值大了,应该左移
if temp > target {
right--
//如果小于目标值,说明左索引值小了,应该右移
} else if temp < target {
left++
// 如果都不是说明正好等于目标值,直接返回目标值即可
} else {
return target
}
//在不改变temp值的基础上比较大小,更新最小值
if distance(temp, target) < distance(result, target) {
result = temp
}
}
}
return result
}
func distance(a, b int) int {
if a < b {
return b - a
}
return a - b
}