在做了好多双指针终于掌握了这门技术。。。。要多想一些双指针之上的优化策略,比如什么时候可以直接跳出、将列表里的数字(会重复遇到的数)先提出来、遇到相同的数直接跳过
不过还是没办法一下子写对啊
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
result=nums[0]+nums[1]+nums[2]
length=len(nums)
middle=abs(result-target)
for i in range(length):
left=i+1
right=length-1
if i > 0 and nums[i] == nums[i-1]:
continue
while left<right:
result_middle=nums[left]+nums[right]+nums[i]
if abs(result_middle-target) < middle:
result=result_middle
middle=abs(result_middle-target)
if left<right and nums[left]==nums[left+1]:
left+=1
if left<right and nums[right]==nums[right-1]:
right-=1
elif result_middle-target<0:
left+=1
else:
right-=1
if middle==0:break
return result