123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package main
- import (
- "fmt"
- "sort"
- )
- func main() {
- var nums []int
- var target int
- //nums = []int{-1, 2, 2, 1, -4}
- //target = 1
- //fmt.Println(threeSumClosest(nums, target))
- //
- //nums = []int{-1, 2, 2, 1, -4}
- //target = 5
- //fmt.Println(threeSumClosest(nums, target))
- //
- //nums = []int{-1, 2, 2, 1, -4}
- //target = 3
- //fmt.Println(threeSumClosest(nums, target))
- //
- //nums = []int{-100, 1, 1, -1, -1, 3}
- //target = -1
- //fmt.Println(threeSumClosest(nums, target))
- nums = []int{1, 2, 5, 10, 11}
- target = 12
- fmt.Println(threeSumClosest(nums, target))
- }
- func abs(val int) int {
- if val > 0 {
- return val
- }
- return -val
- }
- func threeSumClosest(nums []int, target int) int {
- sort.Ints(nums)
- var closest, res int = 1000000, 0
- for i := 0; i < len(nums)-1; i++ {
- if i > 0 && nums[i] == nums[i-1] {
- continue
- }
- var j, k int = i + 1, len(nums) - 1
- for j < k {
- var count = nums[i] + nums[j] + nums[k]
- var distance = abs(count - target)
- fmt.Println(nums[i], nums[j], nums[k], count, distance, closest)
- if distance == 0 {
- return count
- }
- if distance < closest {
- res = count
- closest = distance
- }
- if count-target < 0 {
- j++
- }
- if count-target > 0 {
- k--
- }
- }
- }
- return res
- }
|