|
@@ -0,0 +1,69 @@
|
|
|
+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
|
|
|
+}
|