16. 3Sum Closest

前端之家收集整理的这篇文章主要介绍了16. 3Sum Closest前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Given an array S of n integers,find three integers in S such that the sum is closest to a given number,target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

For example,given array S = {-1 2 1 -4},and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

func threeSumClosest(nums []int,target int) int {
    if len(nums) < 3 {
        return -1
    }
    sort.Ints(nums)
    result := nums[0] + nums[1] + nums[2]
    for i := 0; i < len(nums)-2; i++ {
        j := i + 1
        k := len(nums) - 1
        sum := 0
        for j < k {
            sum = nums[i] + nums[j] + nums[k]
            if sum == target {
                return sum
            }
            if sum > target {
                k--
            } else {
                j++
            }
            result = getCloser(sum,result,target)
        }
    }
    return result
}

func getCloser(num1,num2,target int) int {
    if math.Abs(float64(num1-target)) > math.Abs(float64(num2-target)) {
        return num2
    } else {
        return num1
    }
}

猜你在找的Go相关文章