May 01, 2022

973. K Closest Points to Origin

973. K Closest Points to Origin

Sol 1. Max Heap

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;
    }
}

Solution 2. Sorting

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);
    }
}
comments powered by Disqus