leetcode16 3-Sum

题目链接

给定数组a[](长度不小于3)和一个数字target,要求从a中选取3个数字,让它们的和尽量接近target。
解法:首先对数组a进行排序,其次枚举最外面两层指针,对于第三个指针肯定是从右往左(由大变小)慢慢单向滑动的。

class Solution(object):
    def __init__(self):
        self.ans=0xffffffffff
    def threeSumClosest(self, nums, target): 
        nums=sorted(nums) 
        def update(i,j,k):#更新答案
            now_ans=nums[i]+nums[j]+nums[k]
            if abs(self.ans-target)>abs(now_ans-target):
                self.ans=now_ans
        for i in range(len(nums)-2):
            k=len(nums)-1
            for j in range(i+1,len(nums)-1): 
                while k>j and nums[i]+nums[j]+nums[k]>target:
                    k-=1
                if k<j:
                    update(i,j,j+1)
                    break 
                if k>j and k<len(nums):
                    update(i,j,k) 
                if k>=j and k+1<len(nums):
                    update(i,j,k+1)
        return self.ans
原文地址:https://www.cnblogs.com/weiyinfu/p/7582384.html