题目描述:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
链接:https://leetcode-cn.com/problems/3sum-closest
示例:
解题思路:排序 + 双指针 指针i:指向数组头部 指针j:指向数组尾部 变量res: 存储最接近三数之和 变量sum: 存储当前三数之和 (1) 对数组排序 (从小到大); (2) 遍历数组nums; a. 为指针i,j 赋值; b. 不断移动指针,执行循环,直到i==j; - 求出当前三数之和赋值给sum; - 比较sum、res与target的距离:若当前三数之和更接近目标值。则更新res中存储的值; - 比较sum与target值的大小,判断如何移动指针:若sum大于target,向前移动指针j; 若小于,向后移动指针i;相等直接返回res; (3) 返回结果res;
代码实现:
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
# 排序
nums.sort()
n = len(nums)
res = nums[0] + nums[1] + nums[2]
for k in range(n) :
i = k + 1
j = n - 1
while i < j :
sum = nums[k] + nums[i] + nums[j]
if abs(sum - target) < abs(res - target) :
res = sum
if sum > target :
j -= 1
elif sum < target :
i += 1
else :
return res
return res