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 }