力扣 16 最接近的三數之和, 雙指標法

2021-09-26 15:56:50 字數 999 閱讀 2606

題目:

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.

與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).

**:class solution:

def threesumclosest(self, nums: list[int], target: int) -> int:

nums.sort()              #先將原陣列進行排序

res = float("inf")             #res先賦值乙個正無窮大的數

for k in range(len(nums) - 2):         #遍歷陣列,後面還有i和j指標,因此只用遍歷到len(nums) - 2

if k > 0 and nums[k] == nums[k - 1]: continue      #如果有重複的數字,則直接跳過,避免重複答案

i, j = k + 1, len(nums) - 1          #雙指標法,分別從兩側遍歷k後面的陣列

while i < j:

tmp = nums[k] + nums[i] + nums[j]            #計算三個數的和

if abs(tmp - target) < abs(res - target): res = tmp     #判斷是否要更新全域性結果

if tmp > target: j -= 1         #更新下標,如果當前值比target大,j減小

elif tmp < target: i += 1        #更新下標,如果當前值比target小,i增加

else: return target               #當前值等於target,直接返回,這個就是最小值

return res

力扣 16 最接近的三數之和

16.最接近的三數之和 給你乙個長度為n的整數陣列nums和 乙個目標值target。請你從nums中選出三個整數,使它們的和與target最接近。假定每組輸入只存在恰好乙個解。示例 1 輸入 nums 1,2,1,4 target 1 輸出 2 解釋 與 target 最接近的和是 2 1 2 1...

16 最接近的三數之和 排序 雙指標

自己做這道題,除了三重迴圈遍歷,別的什麼方法都想不出來。哪怕是剛做過的和這道題幾乎一樣的十五題。心態 順便說一下,csdn這個 編輯真的很難用,複製貼上過來的 縮排不整齊,真的忍了很久了。暴力解法 三重迴圈 class solution else 不能寫作兩個if。class solution if...

力扣第16題 最接近的三數之和

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。示例 輸入 nums 1,2,1,4 target 1 輸出 2 解釋 與 target 最接近的和是 2 1 2...