题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解题:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
n=len(nums)
if(not nums or n<3): # 边界检测是否存在空列表或者长度小于3的列表
return
nums.sort() # 列表排序
min3 = abs(target)+sum(map(abs, nums))+1 # 最小值的处置给定需要考虑
sum3 = 0
for i in range(n):
left=i+1 # 设置双指针,最左端和左右端(不包括最小数num[i])
right=n-1
while(left < right):
sum3 = nums[i]+nums[left]+nums[right]-target
if(sum3 == 0):
return target
elif(sum3 > 0): # 大于0,右端指针左移
if (abs(min3) > abs(sum3)): # 只有当有更小值时才更新数值
min3 = sum3
right = right-1
elif(sum3 < 0): # 小于0,左端指针右移
if (abs(min3) > abs(sum3)): # 只有当有更小值时才更新数值
min3 = sum3
left = left+1
return min3+target