1. 程式人生 > >Leetcode篇:最接近的三個數

Leetcode篇:最接近的三個數


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