题目来源

​3Sum Closest​

问题描述

给定一个包括 n 个整数的数组 S,找出 S 中的三个整数使得他们的和与给定的数 target 最接近。返回这三个数的和。假定每组输入只存在一个答案。

例如,给定数组 S = {-1 2 1 -4}, 并且 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

解决方案

python

同上篇的三数之和,先排序,固定一个数再两头夹。

class Solution:
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()

ressum=sum(nums[:3])#初始化和
mindis=abs(ressum-target)#初始化距离

for i in range(len(nums)-2):
j=i+1
k=len(nums)-1
while(j<k):
s=nums[i]+nums[j]+nums[k]
dis=abs(s-target)
if dis < mindis: #距离在变小,更新距离
mindis = dis
ressum = s
if s>target: # 和在target左边,则增大和
k-=1
elif s<target: # 和在target右边,则减小和
j+=1
elif s==target: # 和和target相同,此时达到最近距离0
return s

return