16 最接近的三數之和

2021-10-23 20:56:41 字數 1545 閱讀 1005

給定乙個包括 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...