要求:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
- 示例 1
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
详解代码
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
result, min_diff = 0, float('inf')
for index in range(len(nums) - 1):
left = index + 1
right = len(nums) - 1
while left < right:
currSum = nums[index] + nums[left] + nums[right]
diff = abs(target - currSum)
if diff == 0:
return target
if diff < min_diff:
min_diff = diff
result = currSum
if currSum < target:
left += 1
else:
right -= 1
return result
整体的思路:我们先将nums列表进行排序,然后循环遍历整个数据,分别从左和右取出来一个数据,有点二分查找的思想,但是使用result进行历史和target的数值的差值的保存。