Leetcode篇:最接近的三個數
阿新 • • 發佈:2018-11-10
@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)