leetcode 16 最接近的三數之和

2021-10-09 14:16:07 字數 1364 閱讀 2251

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