20211209|每日算法—最接近的三数之和
作者:互联网
疾风知劲草,板荡识诚臣。
勇夫安识义,智者必怀仁。
0x001、最接近的三数之和
地址:https://leetcode-cn.com/problems/3sum-closest/
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
实例一
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
方法一、排序+双指针
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
flag = float("inf")
lenght = len(nums)
for i in range(lenght):
if i>0 and nums[i]==nums[i-1]:
continue
left,right = i+1,lenght-1
while left<right:
curr = nums[i]+nums[left]+nums[right]
if curr==target:
return curr
elif curr<target:
flag = self.update_flag(flag=flag,curr=curr,target=target)
# 解决重复
while left<right and nums[left]==nums[left+1]:
left+=1
left+=1
else:
flag = self.update_flag(flag=flag,curr=curr,target=target)
# 解决重复
while left<right and nums[right]==nums[right-1]:
right-=1
right-=1
return flag
def update_flag(self,flag,curr,target):
if abs(curr-target)<abs(flag-target):
return curr
return flag
console.log("公众号:虫术")
Blog:http://404nofoundx.top/
标签:target,nums,int,三数,lenght,算法,20211209,left 来源: https://blog.csdn.net/qq_41179280/article/details/121851207