16. 3Sum Closest
題目網址:https://leetcode.cn/problems/3sum-closest/
題意:給一長度為
n的整數 arraynums和一整數target, 從nums選出三個整數, 使其 sum 最接近target, 返回這三個數之 sum。假設每個輸入恰只存在一個解。

Solution:
想法:利用 Two Pointers
- 首先, 將
nums由小到大做排序, 用res來記錄當前最接近target之 sum- 用
i遍歷[0 , n], 每一次i遍歷一元素
- 使用 Two pointer 尋找:
left = i + 1,right = n - 1, 並用sum紀錄當前三數之和- 若
sum比res還更接近target, 則res = sum- 否則, 代表
sum比res離target更遠, 則可細分成兩種情形:
sum < target:left + 1sum ≥ target:right - 1
class Solution { |
- time:$O(n^2)$ ➔ $O(n \cdot log(n)) + O(n^2)$
- $O(n \cdot log(n))$:排序
nums - $O(n^2)$:for loop 需 $O(n)$, 其中每一個元素用 two pointer 遍歷剩餘元素需 $O(n)$
- $O(n \cdot log(n))$:排序
- space:$O(1)$ ➔ 撇除要返回的
res, 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論