16. 最接近的三数之和

image.png
重点是先排序,然后创建左右指针地址根据tagart 接近情况来左右移动

  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. "sort"
  6. )
  7. func threeSumClosest(nums []int, target int) int {
  8. res :=nums[0]+nums[1]+nums[2]
  9. sort.Ints(nums)
  10. for i:=0;i<len(nums)-2;i++{
  11. l :=i+1
  12. r:=len(nums)-1
  13. for l<r{
  14. tmp:=nums[i]+nums[l]+nums[r]
  15. if tmp>target {
  16. r--
  17. }else if tmp<target {
  18. l++
  19. }else {
  20. return target
  21. }
  22. if int(math.Abs(float64(tmp-target)))<int(math.Abs(float64(res-target))) {
  23. res = tmp
  24. }
  25. }
  26. }
  27. return res
  28. }
  29. func main() {
  30. fmt.Println(threeSumClosest([]int{-1,2,1,-4},1))
  31. fmt.Println(threeSumClosest([]int{0,0,0},1))
  32. }

image.png