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號