タイトル
n個の整数と目標NUMSターゲットを含むアレイを考えます。NUMSは三つの整数を特定し、そのような彼らの最も近いことをターゲットにしています。3つの数字とリターン。各グループは唯一の答えのみ入力があることを前提としています。
例えば、配列NUMS = [-1,2,1、-4]、およびターゲット= 1が与えられます。
最も近いターゲットは、三及び番号2(-1 = 1 + 2 + 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