雙指標——最接近的三數之和,細節處理還是很關鍵的
阿新 • • 發佈:2021-01-12
59. 最接近的三數之和
中文 English給一個包含 n 個整數的陣列 S, 找到和與給定整數 target 最接近的三元組,返回這三個數的和。
樣例
例1:
輸入:[2,7,11,15],3
輸出:20
解釋:
2+7+11=20
例2:
輸入:[-1,2,1,-4],1
輸出:2
解釋:
-1+2+1=2
挑戰
O(n^2) 時間, O(1) 額外空間。
注意事項
只需要返回三元組之和,無需返回三元組本身
class Solution: """ @param numbers: Give an array numbers of n integer @param target: An integer @return: return the sum of the three integers, the sum closest target. """ def threeSumClosest(self, numbers, target): # write your code here numbers.sort() s = diff = float('inf') def find_nearest(arr, k, t, n): nonlocal s,diff l, r = k, len(arr) - 1 while l < r: if arr[l] + arr[r] > t: if arr[l] + arr[r] - t < diff: s = arr[l] + arr[r] + n diff = arr[l] + arr[r] - t r -= 1 else: if t - arr[l] - arr[r] < diff: s = arr[l] + arr[r] + n diff = t - arr[l] - arr[r] l += 1 return s for i, n in enumerate(numbers): if i > 0 and numbers[i] == numbers[i - 1]: continue find_nearest(numbers, i + 1, target - n, n) return s