給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
示例:
輸入:nums = [-1,2,1,-4], target = 1輸出:2
解釋:與 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
此題是15. 三數之和的公升級,區別在於將求定值變成了求最接近的值。思路還是一樣的,不同的是維護乙個變數記錄當前確定的三個數的和於目標值的差值,並更新到最小,直至全部遍歷一遍。於是在【三數之和】的**基礎上修改。而且【三數之和】輸出的是三元組,還需要去重,這裡只需要求值,可以刪去不少**。
此題用雜湊表反而**臃腫,不如只用雙指標來的乾脆,不得不說在保持有序這一塊雜湊表並不是很好用。
class
solution
:def
threesumclosest
(self, nums: list[
int]
, target:
int)
->
int:
ifnot nums or
len(nums)
<3:
return0if
len(nums)==3
:return
sum(nums)
ans =
float
('inf'
) nums.sort(
)for i in
range
(len
(nums)):
if i >
0and nums[i]
== nums[i-1]
:continue
left, right = i +1,
len(nums)-1
while left < right:
if target == nums[i]
+ nums[left]
+ nums[right]
:return target
ifabs(target -
(nums[i]
+ nums[left]
+ nums[right]))
<
abs(target - ans)
: ans = nums[i]
+ nums[left]
+ nums[right]
if target > nums[i]
+ nums[left]
+ nums[right]
: left +=
1else
: right -=
1return ans
16 最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 思考...
16 最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 如果...
16 最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...