16. 3Sum Closest

来源:互联网 发布:python中exec 编辑:程序博客网 时间:2024/05/17 22:32

题意:给定一个含有n个数的数组S,找出其中的三个数即它们的和与给定的目标数最接近,并返回这三个数的和,假定每个输入只有一个解。

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).

思路:解法和15.3Sum 类似,只是要求的是使三个数的和与目标数的差尽量接近0,用一个mint来存储暂时的差的绝对值最小值即可。

class Solution(object):    def threeSumClosest(self, nums, target):        """        :type nums: List[int]        :rtype: List[List[int]]        """        nums = sorted(nums)        mint = float('inf')        for i in xrange(len(nums)-2):            if i > 0 and nums[i] == nums[i-1]:                continue            j, k = i+1, len(nums)-1            while j < k:                sumt = nums[i]+nums[j]+nums[k]-target                if abs(sumt) == 0:                    return nums[i]+nums[j]+nums[k]                if abs(sumt) < mint:                    answer = nums[i]+nums[j]+nums[k]                    mint = abs(sumt)                if sumt < 0:                    j += 1                else:                    k -= 1        return answer
0 0