Leetcode专题[数组]-16-最接近的三数之和

力扣链接:https://leetcode-cn.com/probl...
解题思路:

  1. 这道题的解题思路跟三数之和相同,都是:排序+双指针
  2. 首先将数组排序,然后初始化三数之和为数组的前三个元素
  3. 然后标的i第一个数字开始遍历,如果遇到相同的数字就跳过,后两位数字为双指针,分别是i后的第一个数字和数组的最后一个数字
  4. 当两个指针相遇之前,计算三个数的和,记录跟target绝对值最小的和,如果想等直接返回

    func threeSumClosest(nums []int, target int) int {
     sort.Ints(nums)
     n, closeSum := len(nums), nums[0] + nums[1] + nums[2]
     for i := 0; i < n - 2; i++ {
         if i > 0 && nums[i] == nums[i-1] {
             continue
         }
         j, k := i+1, n-1
         for j < k {
             sum := nums[i] + nums[j] + nums[k]
             if sum == target {
                 return target
             }
             if abs(closeSum - target) > abs(sum - target) {
                 closeSum = sum
             }
             if sum > target {
                 k--
             } else {
                 j++
             }
         }
     }
     return closeSum
    }
    
    func abs(x int) int {
     if x > 0 {
         return x
     }
     return -x
    }

你可能感兴趣的:(golang)