"""給定乙個包括 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 最接近的...