给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近,返回这三个数的和。
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 2 1 = 2)
解题思路
""" 同三数之和类似,也是先排序,然后遍历列表,根据左右指针计算值;
最接近三数字和需要与target进行比较,使用绝对值进行比较,然后进行移动指针
1. 列表排序,for循环遍历列表:
2. 定义左右指针,while循环,计算三数之和并重新赋值,根据结果移动左右指针
3. 和大于目标值,右指针左移动 -1;
4. 和小于目标值,左指针移动 1;
"""
人生苦短, 我用python, 算法学习, 点滴开始
from typing import List
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
len_nums = len(nums)
base = 10 ** 5
for i in range(len_nums):
if i > 0 and nums[i] == nums[i-1]:
continue
l, r = i 1, len_nums - 1 # 定义左右双指针
while l < r:
count = nums[i] nums[l] nums[r]
if count == target:
return count
if abs(count - target) < abs(base - target): # 绝对值判断三数之和与目标值
base = count
if count > target:
r -= 1
while l < r and nums[r] == nums[r 1]:
r -= 1
else:
l = 1
while l < r and nums[l] == nums[l-1]:
l = 1
return base
#程序员##每日一题##新手小白求过百粉#
,