题目描述
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
排序加双指针
因为光是看题目名字就和三数之和很像,所以还是考虑用双指针来解决
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
n=len(nums)
n1,n2,n3=0,1,n-1
min_=abs(nums[n2]+nums[n1]+nums[n3]-target) #记录距离
solution=nums[n2]+nums[n1]+nums[n3] #记录最优和
if n3==2:
return sum(nums)
while n1<n-2:
n2=n1+1
n3=n-1
while n2<n3:
sum_=nums[n1]+nums[n2]+nums[n3]
if sum_==target:
return target
elif abs(sum_-target)<min_:
solution=sum_
min_=abs(sum_-target)
if sum_<target:
n2+=1
else:
n3-=1
n1+=1
return solution
执行用时 :112 ms, 在所有 Python3 提交中击败了84.11%的用户
内存消耗 :13.5 MB, 在所有 Python3 提交中击败了21.91%的用户