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 + 1
sum ≥ 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!
評論