給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
示例:輸入:nums = [-1,2,1,-4], target = 1
輸出:2
解釋:與 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
class solution(object):
def threesumclosest(self, nums, target):
""":type nums: list[int]
:type target: int
:rtype: int
"""if len(nums) < 3:
return
nums.sort()
mind = 1<<31
s = none
for i in range(len(nums)-2):
num1 = nums[i]
mindiff = 1<<31
summ = none
start = i + 1
end = len(nums) - 1
while start < end:
tmp = num1 + nums[start] + nums[end]
if abs(tmp-target) < mindiff:
mindiff = abs(tmp-target)
summ = tmp
if tmp > target:
end -= 1
elif tmp < target:
start += 1
else:
break
if mindiff < mind:
mind = mindiff
s = summ
if summ == target:
break
return s
比較直觀的方式就是使用雙指標來破解雙數之和或者三數之和。我們可以先對其進行排序,然後從頭開始每次先確定第乙個數字,下標為i,然後取兩個指標分別指向i+1 和n-1兩個數字作為第二個數和第三個數。將它們的和與target進行比對,如果小於target則將左指標右移,如果大於target則將右指標左移,如果等於target則為最優情況,直接可以退出所有迴圈。時間複雜度:首先進行了一次排序,時間複雜度為o(nlogn),然後最外層遍歷o(n),加上內層對剩餘陣列的掃瞄o(n),所以最後的時間複雜度為o(n^2) LeetCode 16 最接近的三數之和
題目傳送門 給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 ...
leetcode 16 最接近的三數之和
給定乙個包括 n 個整數的陣列nums和 乙個目標值target。找出nums中的三個整數,使得它們的和與target最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2 1 2 顯然...
Leetcode 16 最接近的三數之和
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...