973. K Closest Points to Origin
Time = O(nlogk), space = O(k) - len=n array with top k elements
class Solution {
public int[][] kClosest(int[][] points, int k) {
Queue<int[]> maxHeap = new PriorityQueue<>(k, (p1, p2) -> (
(p2[0] * p2[0] + p2[1] * p2[1]) - (p1[0] * p1[0] + p1[1] * p1[1])
));
for (int[] point : points) {
maxHeap.offer(point);
if (maxHeap.size() > k) {
maxHeap.poll();
}
}
int[][] kClosest = new int[k][2];
for (int i = 0; i < k; i++) {
kClosest[i] = maxHeap.poll();
}
return kClosest;
}
}
Time = O(nlogn), space = O(logn)
class Solution {
public int[][] kClosest(int[][] points, int k) {
Arrays.sort(points, (p1, p2) -> (
(p1[0] * p1[0] + p1[1] * p1[1]) - (p2[0] * p2[0] + p2[1] * p2[1])
));
return Arrays.copyOf(points, k);
}
}