16. 3Sum Closest Leetcode Python

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.


    For example, given array S = {-1 2 1 -4}, and target = 1.


    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

这题的做法和3sum一样只不过把sum=0改成sum变成target,需要设置一个minval来记录每次和target的最小,如果得到的差值小于记录值那么就将sum赋值给result 最后输出。

时间复杂度依然为O(n^2)


This problem is similar to 3 sum, beside use three pointers to track the value of the 3sums we need to use an extra tracker minval to track the difference between the target and the sum. When the the abs(sum-target)<minval we pass abs(sum-target) to minval and pass sum to result. if any of the sum=target we return target, otherwise return result when all the iteration finished.

the time complexity is O(n^2) space O(1)

code as follow:

class Solution:
    # @return an integer
    def threeSumClosest(self, num, target):
        minval=100000
        num.sort()
        for i in range(len(num)):
            #if i>0 and num[i]==num[i-1]:
             #   continue
            left=i+1
            right=len(num)-1
            while left<right:
                val=num[i]+num[left]+num[right]
                
                if abs(val-target)<minval:
                    minval=abs(val-target)
                    result=val
                if val==target:
                    return target
                if val<=target:
                    left+=1
                else:
                    right-=1
        return result
                    
                    
                    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值