leetcode之16最接近的三数之和Golang

思路和第15题三数之和一样,只不过将15题的和0改成了这道题的target.

代码如下:

func threeSumClosest(nums []int, target int) int {
	min := math.MaxInt32
	sum := 0
	sort.Ints(nums)
	for i := 0; i < len(nums); i++ {
		if i > 0 && nums[i] == nums[i-1] {
			continue
		}
		for j, k := i+1, len(nums)-1; j < k; {
			if j > i+1 && nums[j] == nums[j-1] {
				j++
				continue
			}
			if k < len(nums)-1 && nums[k] == nums[k+1] {
				k--
				continue
			}
			tempSum := nums[i] + nums[j] + nums[k]
			diff := tempSum - target
			if diff == 0 {
				return tempSum
			} else if diff > 0 {
				k--
			} else {
				j++
			}
			if diff < 0 {
				diff = -diff
			}
			if diff < min {
				min = diff
				sum = tempSum
			}
		}
	}
	return sum
}

  

posted @ 2020-09-08 15:37  胖胖咩  阅读(208)  评论(0)    收藏  举报