浏览代码

letcode threeSumClosest题解决

tangs 5 年之前
父节点
当前提交
5d0a07f32a
共有 1 个文件被更改,包括 69 次插入0 次删除
  1. 69 0
      threeSumClosest/main.go

+ 69 - 0
threeSumClosest/main.go

@@ -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
+}