#973.K Closest Points to Origin [LeetCode Grind 75 in Java]

[Problem Link] https://leetcode.com/problems/k-closest-points-to-origin/

class Pair implements Comparable<Pair>{
    long dist;
    int i;

    Pair(long dist , int i){
        this.dist = dist;
        this.i = i;
    }

    @Override
    public int compareTo(Pair other){
        //compare based on distance value
        return (int) (this.dist - other.dist);
    }
}
class Solution {
    public int[][] kClosest(int[][] points, int k) {
        int n = points.length;

        //sort based on distance from the origin
        PriorityQueue<Pair> pq = new PriorityQueue<>();

        for(int i = 0 ; i < n ; i ++){
            int x = points[i][0];
            int y = points[i][1];

            long distOrigin = x*x + y*y;
            pq.add(new Pair(distOrigin , i));
        }
        int[][] ans = new int[k][2];
        for(int i = 0 ; i < k ; i ++){
            Pair cp = pq.poll();
            ans[i][0] = points[cp.i][0];
            ans[i][1] = points[cp.i][1];
        }

        return ans;

    }
}