力ボタン5日目--最も3数に近い和

5941 ワード

二重ポインタ
class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        n=len(nums)-1
        pos=[]
        neg=[]
        for i in range(0,n-1):
            j=i+1
            k=n
            while j<k:
                Sum=nums[i]+nums[k]+nums[j]-target
                if Sum==0:
                    return target
                if Sum>=0:
                    pos.append(Sum)
                    k-=1
                else:
                    neg.append(Sum)
                    j+=1
            
        pos.sort()
        neg.sort(reverse=True)
        if neg==[]:
            return pos[0]+target
        if pos==[]:
            return neg[0]+target
        if pos[0]+neg[0]>0:
            return (neg[0]+target)
        else:
            return (pos[0]+target)