LC16 最接近的三数和
1 题目
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例 1:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。
示例 2:
输入:nums = [0,0,0], target = 1
输出:0
解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。
提示:
3 <= nums.length <= 1000-1000 <= nums[i] <= 1000-104 <= target <= 104
2 解答
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
diff = inf
result = 0
#range前闭后开 len(nums) - 2 在循环里面到达len(nums)-这个位置
for i in range(0 , len(nums)-2 , 1):
# 这里面是一个优化,如果和前一个数据相同,那么直接跳过这个数据即可
if i > 0 and nums[i] == nums[i-1]:
continue
# 双指针使用
left = i + 1
right = len(nums) - 1
while left<right:
s = nums[i] + nums[left] + nums[right]
#如果S 等于 目标值 直接输出完事儿
if s == target:
result = s
return result
# 如果S 大于目标值那么就需要进行 右 指针向 左 移动一位
if s > target :
if diff > s - target:
result = s
diff = s - target
right -= 1
# 如果S 小于目标值那么就需要进行 左 指针向 右 移动一位
if s<target :
if diff > target - s:
result = s
diff = target - s
left += 1
return result

浙公网安备 33010602011771号