力扣十六 最接近的三数之和

庆祝自己第一次达到百分之95以上

执行用时:4 ms, 在所有 Go 提交中击败了95.59%的用户

内存消耗:2.7 MB, 在所有 Go 提交中击败了98.89%的用户

题目描述

给定一个包括 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

思路

和第十五题类似,先排序,后用对撞指针对后面的数字进行扫描,只需注意一点return的是sum的值,min却是target-sum

代码:

func threeSumClosest(nums []int, target int) int {
    //先排序
    min:=999999
    var value int
    sort.Ints(nums)
    length:=len(nums)
    //确认好一个数之后用对撞指针
     for k:=0;k<length-2;k++{
        left:=k+1
        right:=length-1
        for left<right{
            sum := nums[left]+nums[right]+nums[k]
            if(sum==target){
                return sum
            }else if(sum<target){
                if(target-sum<min){
                    min=target-sum
                    value=sum  //这里要注意,return的是sum的值,min却是target-sum
                }
                left++
            }else{
                if(sum-target<min){
                    min=sum-target
                    value=sum
                }
                right--
            }
        }
    }
    return value
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!