Leetcode题库——16.最接近的三数之和


@author: ZZQ
@software: PyCharm
@file: threeSumClosest.py
@time: 2018/10/14 20:28
说明:最接近的三数之和。
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,
使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

思路: 类似三数之和,先确定一个指针,指向第一个数(指针范围:0到n-2,确保first和last指针存在)
然后比较三数之和与target之间的绝对值与原来结果的大小,每次更新到最新的满足条件的和。

class Solution():
    def __init__(self):
        pass

    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()
        ans = nums[0] + nums[1] + nums[2]
        nums_len = len(nums)
        if nums_len == 0:
            return []
        for middle in range(len(nums) - 2):
            if middle == 0 or nums[middle] > nums[middle - 1]:
                first = middle + 1
                last = len(nums) - 1
                while first < last:
                    sum = nums[first] + nums[last] + nums[middle]
                    if abs(ans-target) >= abs(sum-target):
                        ans = sum
                    if sum >= target:
                        last -= 1
                    if sum < target:
                        first += 1
        return ans


if __name__ == "__main__":
    answer = Solution()
    print answer.threeSumClosest([-1, 1, 1, 1], -100)
原文地址:https://www.cnblogs.com/zzq-123456/p/9818330.html