Given an array of points where points[i] = [xi, yi] represents a point on the X-Y plane and an integer k, return the k closest points to the origin (0, 0).
The distance between two points on the X-Y plane is the Euclidean distance (i.e., √(x1 - x2)2 + (y1 - y2)2).
You may return the answer in any order. The answer is guaranteed to be unique (except for the order that it is in).
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]].
Input: points = [[3,3],[5,-1],[-2,4]], k = 2
Output: [[3,3],[-2,4]]
Explanation: The answer [[-2,4],[3,3]] would also be accepted.
The most straightforward way to solve this problem is to calculate the distance of each point from the origin and then sort the points based on these distances.
K points from the sorted list.Instead of sorting the entire array, we can maintain a max heap of size K to keep track of the K closest points. This allows for more efficient insertion and removal operations as we process each point.
K closest points by removing the farthest point when the heap size exceeds K.K closest points in the heap.Quickselect is an optimization over quicksort that allows us to partition the array and only focus on the K closest elements. It can achieve an average time complexity better than sorting or using a heap.