给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
思路:
数据不强不用去重,直接一重外循环+内部双指针O(N ^ 2)可以过。
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
res = nums[0] + nums[1] + nums[2]
for i, num in enumerate(nums):
left, right = i + 1, len(nums) - 1
while left < right:
s = num + nums[left] + nums[right]
# print s, res, abs(s - target), abs(res - target)
if abs(s - target) < abs(res - target):
res = s
if s == target:
return s
elif s < target:
left += 1
else:
right -= 1
return res