- 题目描述
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
- 示例
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).、
- 思路
用两个变量,一个来记录要返回的三个数之和,另一个用来记录整个数组中三元组之和与target的最小差值,在遍历过程中,不断判断并更新这两个值。
- 代码
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if(len(nums) < 3):
return []
nums.sort()
#记录最小距离值,初始值设为正无穷
Min = float('inf')
#返回值,最接近的三数之和
res = 0
#从头开始遍历数组
for i in range(len(nums)):
#判断当前元素是否作为三元组的第一个数字出现过
if i == 0 or nums[i] > nums[i-1]:
l = i + 1
r = len(nums) - 1
while l < r:
#当前三元组之和
temp = nums[i] + nums[l] + nums[r]
#如果与target的距离小于当前最小距离值,就记录当前的最小距离值和最接近的三数之和,即要返回的值
if abs(temp-target) < Min:
Min = abs(temp - target)
res = temp
#如果三数之和大于target,r向前移动
if temp - target > 0:
r -= 1
#如果三数之和小于target,l向后移动
elif temp - target < 0:
l += 1
#如果三数之和等于target,也就意味着差值为0,返回target即可。
else:
return target
return res