42 lines
693 B
Go
42 lines
693 B
Go
package main
|
||
|
||
import (
|
||
"sort"
|
||
)
|
||
|
||
func threeSumClosest(nums []int, target int) int {
|
||
min := int(^uint(0) >> 1)
|
||
minAbs := min
|
||
numLen := len(nums)
|
||
sort.Slice(nums, func(i, j int) bool {
|
||
return nums[i] < nums[j]
|
||
})
|
||
for i := 0; i < numLen-2; i++ {
|
||
left, right := i+1, numLen-1
|
||
for left < right {
|
||
tmp := nums[i] + nums[left] + nums[right]
|
||
tmpAbs := target - tmp
|
||
if tmpAbs < 0 {
|
||
tmpAbs = -tmpAbs
|
||
}
|
||
if tmp < target {
|
||
left++
|
||
} else {
|
||
right--
|
||
}
|
||
if tmpAbs < minAbs {
|
||
min = tmp
|
||
minAbs = tmpAbs
|
||
}
|
||
}
|
||
}
|
||
return min
|
||
}
|
||
|
||
func main() {
|
||
println(threeSumClosest([]int{1, 2, 4, 8, 16, 32, 64, 128}, 82))
|
||
}
|
||
|
||
// [1,2,3,4,5,6,7,8,9]
|
||
// [-1,2,1,-4]
|