@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)
05-11 09:00