最接近的三数之和

leetcode 16

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

三数之和的变形

func threeSumClosest(nums []int, target int) int {
    sort.Ints(nums)
    bestTarget := nums[0] + nums[1] + nums[2] // initial value
    if len(nums) == 3 {
        return bestTarget
    }
    for i := 0; i < len(nums)-2; i++ {
        newTarget := target - nums[i]
        l, r := i+1, len(nums)-1
        for l < r {
            if abs(bestTarget-target) > abs(nums[l]+nums[r]+nums[i]-target) {
                bestTarget = nums[l] + nums[r] + nums[i]
            }
            if bestTarget == target {
                return bestTarget
            }
            if nums[l]+nums[r] < newTarget {
                l++
            } else {
                r--
            }
        }
    }
    return bestTarget
}

func abs(n int) int {
    if n < 0 {
        return -n
    }
    return n
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容