题目分析:
这道题目与3Sum很类似,只是让返回与目标最接近的结果,所以比3Sum难一些,我们可以考虑3Sum的解法同时加入一个变量记录和与目标的差值。
代码说明:
1、这是存储返回的最接近的三个数的和他们与目标的差值
res = nums[0] + nums[1] + nums[2]
min_c = abs(target - res)
2、如果差值小于最小差值,更新差值与返回值。
if cha < min_c:
min_c = cha
res=sum
3、3个数和与目标相同直接返回和即可,小于目标元素左指针右移(增大和),否则大于(等于上面判断过)右指针左移(减小和)。
if sum == target: return sum elif sum < target: j += 1 else: k -= 1
测试代码:
class Solution:
def threeSumClosest(self, nums, target):
if not nums: return nums
nums.sort()
l = len(nums)
res = nums[0] + nums[1] + nums[2]
min_c = abs(target - res)
for i in range(l):
j, k = i + 1, l - 1
while(j < k):
sum = nums[i] + nums[j] + nums[k]
cha = abs(target - sum)
if cha < min_c:
min_c = cha
res=sum
if sum == target: return sum
elif sum < target: j += 1
else: k -= 1
return res
print(Solution().threeSumClosest([0,2,1,-3], 1)) #提交时请删除该行