973. K Closest Points to Origin
https://leetcode.com/problems/k-closest-points-to-origin/
We need a data structure of size K, we also need to consider each array element as candidate
Initialize data structure with first K elements from array
Iterate array K through the end
If array element is larger than max element in data structure
Current element is not candidate for answer => Do nothing
If array element is less than max element
Current element is candidate for answer => Add current element, trash the max element from collection
Data structure should support
Quick lookup of largest element
Low cost of adding one element, removing one element
Max Heap is appropriate
---
We have a list of
points on the plane. Find the K closest points to the origin (0, 0).
(Here, the distance between two points on a plane is the Euclidean distance.)
You may return the answer in any order. The answer is guaranteed to be unique (except for the order that it is in.)
Example 1:
Input: points = [[1,3],[-2,2]], K = 1 Output: [[-2,2]] Explanation: The distance between (1, 3) and the origin is sqrt(10). The distance between (-2, 2) and the origin is sqrt(8). Since sqrt(8) < sqrt(10), (-2, 2) is closer to the origin. We only want the closest K = 1 points from the origin, so the answer is just [[-2,2]].
Example 2:
Input: points = [[3,3],[5,-1],[-2,4]], K = 2 Output: [[3,3],[-2,4]] (The answer [[-2,4],[3,3]] would also be accepted.)
Note:
1 <= K <= points.length <= 10000-10000 < points[i][0] < 10000-10000 < points[i][1] < 10000
-----
Intuition
We need a data structure of size K, we also need to consider each array element as candidate
Initialize data structure with first K elements from array
Iterate array K through the end
If array element is larger than max element in data structure
Current element is not candidate for answer => Do nothing
If array element is less than max element
Current element is candidate for answer => Add current element, trash the max element from collection
At the end of array traversal, we will have popped out larger elements and K smallest elements remain
Data structure should support
Quick lookup of largest element
Low cost of adding one element, removing one element
Max Heap is appropriate
---
Time - O(n * log(K))
Space - O(K)
---