給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).
先排序,然後從兩端開始向中間搜尋,i為遍歷後的數字,r表示最右端數字,l表示nums[i + 1],我們考慮這三個數與target的差值,若是大於0,則我們把r挪一位(r-=1),若是小於0,則將l挪一位(l+=1),等於0直接返回target, 同時每次操作時把三位數與target的差值放入列表中,然後把 i 挪一位(i +=1),再重複上面的操作。最後我們會得到三個數與target差值的列表,再對其排序,我們可以找到唯一的一組相鄰的兩個數數,比較這兩個數的絕對值,返回絕對值小的那個數與target的和。
class
solution
:def
threesumclosest
(self, nums, target)
: nums.sort(
) res_sum = nums[0]
+ nums[1]
+ nums[2]
res_abs =
abs(nums[0]
+nums[1]
+nums[2]
-target)
for i in
range
(len
(nums)-2
):l = i +
1 r =
len(nums)-1
while l < r:
three_sum = nums[i]
+ nums[l]
+ nums[r]
abs_sub =
abs(three_sum - target)
if abs_sub ==0:
return target
elif abs_sub < res_abs:
res_abs = abs_sub
res_sum = three_sum
elif three_sum > target:
r -=
1else
: l +=
1return res_sum
LeetCode 最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 cl...
LeetCode 最接近的三數之和
q 給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。示例 輸入 nums 1,2,1,4 target 1 輸出 2 解釋 與 target 最接近的和是 2 1...
LeetCode之最接近的三數之和
題目描述 給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1...