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
}
浙公网安备 33010602011771号