最接近的三個數的和

2021-09-29 10:43:58 字數 1412 閱讀 3709

"""

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

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

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

題解:排序+雙指標

演算法流程:

特判,對於陣列長度 l,如果陣列為null或者陣列長度小於3,返回 none。

對陣列進行排序,並定義min_num,儲存最接近和。

遍歷排序後陣列:

對於重複元素,跳過,避免重複計算(也可以不跳過)

令左指標left=i+1,右指標r=n-1,當l int:

l = len(nums)

# 特判,對於陣列長度 l,如果陣列為null或者陣列長度小於3,返回 none。

if not nums or l < 3: return none

nums = sorted(nums)

min_num = nums[0] + nums[1] + nums[2]

for i in range(l - 1):

# 對於重複元素,跳過,避免重複計算(也可以不跳過)

if (i>0 and nums[i]==nums[i-1]):

continue

left, right = i + 1, l - 1

while left < right:

temp = nums[i] + nums[left] + nums[right]

# temp=nums[i]+nums[left]+nums[right],如果temp=target,返回target

if temp == target: return target

# 若abs(temp-target)if abs(temp - target) < abs(min_num - target):

min_num = temp

# 若temp-target小於0,說明nums[left]太小,left右移

if temp - target < 0:

left += 1

# 若temp-target大於0,說明nums[right]太大,right左移

else:

right -= 1

return min_num

測試:

if __name__ == "__main__":

s = solution()

nums = [-1,2,1,-4]

target = 1.

r = s.threesumclosest(nums,target)

print(r)

三個數之和,最接近目標數的演算法python實現

1.給定乙個陣列和目標數,求陣列中三個數之和最接近目標數的和,假設陣列至少有一組和滿足條件。nums.sort l len nums sum nums 0 nums 1 nums 2 for i in range 0,l 2 if nums i nums i 1 continue next i 1 ...

力扣日記 016 最接近的三個數之和

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。題目基本屬於015的姊妹篇了。依然使用雙指標遍歷一遍。class solution def threesumclo...

16 。最接近的三數和

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