原题
https://leetcode.cn/problems/3sum-closest/description/
思路
双指针
复杂度
时间:O(n * n)
空间:O(1)
Python代码
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
ans = float('inf')
for i in range(len(nums)):
# 去重
if i >= 1 and nums[i] == nums[i-1]:
continue
left, right = i + 1, len(nums) - 1
while left < right:
cur_sum = nums[i] + nums[left] + nums[right]
if cur_sum == target:
return target
if abs(cur_sum - target) < abs(ans - target):
ans = cur_sum
if cur_sum < target:
left += 1
else:
right -= 1
return ans
Go代码
func threeSumClosest(nums []int, target int) int {
sort.Ints(nums)
ans := math.MaxInt32
for i, _ := range nums {
// 去重
if i >= 1 && nums[i] == nums[i-1] {
continue
}
left, right := i+1, len(nums)-1
for left < right {
cur_sum := nums[i] + nums[left] + nums[right]
if cur_sum == target {
return target
}
if math.Abs(float64(cur_sum-target)) < math.Abs(float64(ans-target)) {
ans = cur_sum
}
if cur_sum < target {
left++
} else {
right--
}
}
}
return ans
}
1768

被折叠的 条评论
为什么被折叠?



