973. K Closest Points to Origin
題目網址:https://leetcode.cn/problems/k-closest-points-to-origin/
題意:給一 array
points
和一整數k
, 其中points[i] = [x_i, y_i]
表示平面上的一個點, 返回距離(0, 0)
最近的k
個點。平面上兩點的距離是採用歐式距離 $\sqrt{(x1 - x2)^2 + (y1 - y2)^2}$
可以按任何順序返回答案。
Solution:
想法:利用 Heap, 用 max heap 維護前
k
小的元素, 類似 347. Top K Frequent Elements
- 先將前
k
個元素加入到 max heap 中- 後面
n - k
個點, 都是先 insert 到 heap 中再 pop 掉, 來維持 heap 中k
個元素- 此時, heap 中為前
k
小的元素, 將其取出即可
typedef tuple<int, int, int> t3i; // {dist, x, y} |
- time:$O(n \cdot log(k))$ ➔ 前面兩個 for loop 最多 insert/delete
n
個點, 每次操作需 $O(log(k))$, 因為pq
中最多k
個點 - space:$O(k)$ ➔
pq
最多有k
個元素
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論