题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
这道题跟三数之和差不多,只不过把三数之和的等于0,改成了接近target,所以改下三数之和的代码就好了。三数之和https://blog.youkuaiyun.com/qq_41318002/article/details/93876296
代码
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
li=sorted(nums)
#print(li)
l=len(li)
cha=2**31-1
ans=target
for i in range(l):
x=i+1
y=l-1
if i!=0 and li[i]==li[i-1]:
continue
while(x<y):
#print(x,y,li[x],li[y],li[i])
if x !=i+1 and li[x]==li[x-1]:
x=x+1
continue
if y!=l-1 and li[y]==li[y+1]:
y=y-1
continue
if li[x]+li[y]+li[i]==target:
return li[x]+li[y]+li[i]
x=x+1
y=y-1
else:
tmp=li[x]+li[y]+li[i]
if tmp>target:
if cha > abs(tmp-target):
cha=abs(tmp-target)
ans=tmp
y=y-1
else:
if cha > abs(tmp-target):
cha=abs(tmp-target)
ans=tmp
x=x+1
return ans