Go-threeSumClosest:用数组中的三个数字找出最接近目标数字的和

69 阅读1分钟

概述

其目的是利用给定数组中的三个三联体找到总和,使其最接近给定的目标总和。

对于

Input Array: [0,2,3,-1] Target Sum:6
Output: 5 . It can be formed using 0+2+3 

程序

以下是相同的程序

package main

import (
	"fmt"
	"math"
	"sort"
)

func main() {
	output := threeSumClosest([]int{0, 2, 3, -1}, 6)
	fmt.Println(output)
}

func threeSumClosest(nums []int, target int) int {

	numsLength := len(nums)

	closestSum := 0
	nearest := 10000

	sort.Slice(nums, func(i, j int) bool {
		return nums[i] < nums[j]
	})

	for k := 0; k < numsLength-2; k++ {
		i := k + 1
		j := numsLength - 1
		for i < j {
			sum := nums[k] + nums[i] + nums[j]
			absSum := int(math.Abs(float64(target - sum)))

			if absSum < nearest {
				nearest = absSum
				closestSum = sum
			}

			if nums[k]+nums[i]+nums[j] > target {
				j--
			} else {
				i++
			}
		}
	}

	return closestSum
}

输出

5