解题思路-leetcode第十六题:最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
本题和上一题三数之和很相似,所以采用同样的方法,即先升序排序再利用双指针循环。区别在于,本题是找和最接近目标值的三个数,并返回这个和,所以本题定义了一个无限大浮点数res,用于存储三数之和,在循环体while内也有区别,首先算出当前循环到的三数之和,若此和等于目标值,则返回目标值,若此值与目标值的距离小于上一个循环时的距离,则更新三数之和,若此和小于目标值,则将左指针向右移动,否则右指针向左移动,最后返回存储的三数之和。代码如下:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
n=len(nums)
if(not nums or n<3):
return None
nums.sort()
res=float("inf")
for i in range(n):
if(i>0 and nums[i]==nums[i-1]):
continue
L=i+1
R=n-1
while(L<R):
sum=nums[i]+nums[L]+nums[R]
if(sum==target):
return target
if(abs(sum-target)<abs(res-target)):
res=sum
if(sum-target<0):
L+=1
else:
R-=1
return res
提交后,通过。