Back to Problem
Official
2323 views
Editorial: K Closest Points to Origin
by admin ·
37
1 Intuition
We can sort points by their distance from origin, then return the first k points. Alternatively, use a max heap to maintain k closest points. Both approaches are efficient.
2 Approach
**Method 1 (Sorting):**
1. Calculate distance for each point
2. Sort by distance
3. Return first k points
**Method 2 (Heap):**
1. Use max heap of size k
2. Add distances, keep smallest k
3. Return k points from heap
3 Complexity Analysis
**Time Complexity (Sorting):** O(n log n)
**Time Complexity (Heap):** O(n log k)
**Space Complexity:** O(k) for heap approach
Heap approach is better when k << n.
4 Solution Code
def kClosest(points, k):
# Method 1: Using sorting
points.sort(key=lambda p: p[0]**2 + p[1]**2)
return points[:k]
# Method 2: Using heap (better for large n, small k)
import heapq
return heapq.nsmallest(k, points, key=lambda p: p[0]**2 + p[1]**2)
vector<vector<int>> kClosest(vector<vector<int>>& points, int k) {
sort(points.begin(), points.end(), [](auto& a, auto& b) {
return a[0]*a[0] + a[1]*a[1] < b[0]*b[0] + b[1]*b[1];
});
return vector<vector<int>>(points.begin(), points.begin() + k);
}
5 Code Walkthrough
For points=[[1,3],[-2,2]], k=1:
- Distance (1,3): √(1²+3²)=√10≈3.16
- Distance (-2,2): √(4+4)=√8≈2.83
- √8 < √10, so (-2,2) is closest
Result: [[-2,2]]