16.go 772 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package main
  2. import (
  3. "sort"
  4. )
  5. // same as three sum
  6. func threeSumClosest(nums []int, target int) int {
  7. sort.Ints(nums)
  8. min := 1<<31 - 1
  9. res := 0
  10. for a := 0; a < len(nums)-2; a++ {
  11. // do NOT skip duplicated numbers!
  12. // [1 1 1 0], 100 -(skip 1)-> [1 1 0] 100 -> 2, WA
  13. b, c := a+1, len(nums)-1
  14. for b < c {
  15. sum := nums[a] + nums[b] + nums[c]
  16. if abs(sum-target) < min {
  17. res = sum
  18. min = abs(sum - target)
  19. }
  20. if sum < target {
  21. b++
  22. } else if sum > target {
  23. c--
  24. } else {
  25. return sum
  26. }
  27. }
  28. }
  29. return res
  30. }
  31. /* func main() {
  32. a1 := []int{-1, 0, 1, 2, -1, -4}
  33. fmt.Println(threeSumClosest(a1, 0))
  34. a2 := []int{-1, 0, -4}
  35. fmt.Println(threeSumClosest(a2, 0))
  36. a3 := []int{1, 1, 1, 0}
  37. fmt.Println(threeSumClosest(a3, 100))
  38. } */