leetcode python3 最接近的三数之和

代码思路:先排序,后遍历,利用双指针进行比较,重点是通过三数之和缩小最相似数值所在位置

class Solution:
    def threeSumClosest(self, nums: List[int], tar: int) -> int:
        nums.sort()
        n=len(nums)
        res=float("inf")
        #resFlag=0
        for i in range(0,n-2):
            if nums[i]+nums[i+1]+nums[i+2]-tar==0:
                res=tar
            elif nums[i]+nums[i+1]+nums[i+2]-tar>0:
                if abs(res-tar)>abs(nums[i]+nums[i+1]+nums[i+2]-tar):
                        res=nums[i]+nums[i+1]+nums[i+2]
            else:
                if nums[i]+nums[n-2]+nums[n-1]-tar==0:
                    #resFlag=1
                    res=tar
                elif nums[i]+nums[n-2]+nums[n-1]-tar<0:
                    if abs(res-tar)>abs(nums[i]+nums[n-2]+nums[n-1]-tar):
                        res=nums[i]+nums[n-2]+nums[n-1]
                    continue
                else:
                    start=i+1
                    end=n-1
                    while 1:
                        flag=0
                        while nums[i]+nums[start+1]+nums[end]-tar<0:
                            start+=1
                            flag+=1
                        while nums[i]+nums[start]+nums[end-1]-tar>0:
                            end-=1
                            flag+=1
                        if flag==0:break
                    for j in range(start,end):
                        for k in range(start,end+1):
                            if abs(res-tar)>abs(nums[i]+nums[j]+nums[k]-tar):
                                res=nums[i]+nums[j]+nums[k]
        return res
发布了30 篇原创文章 · 获赞 0 · 访问量 325

猜你喜欢

转载自blog.csdn.net/m0_37656366/article/details/104672494
今日推荐