Advertisement
K Closest Points to Origin
JavaView on GFG
K Closest Points to Origin.java
Java
import java.util.*;
class Solution {
class Pair implements Comparable<Pair> {
int x;
int y;
int dist;
Pair(int x, int y, int dist) {
this.x = x;
this.y = y;
this.dist = dist;
}
@Override
public int compareTo(Pair p2) {
return this.dist - p2.dist;
}
}
public int[][] kClosest(int[][] points, int k) {
int[][] ans = new int[k][2];
PriorityQueue<Pair> pq = new PriorityQueue<>();
for (int i = 0; i < points.length; i++) {
int x = points[i][0];
int y = points[i][1];
int dist = (x * x) + (y * y);
pq.offer(new Pair(x, y, dist));
}
while (k > 0) {
k--;
Pair curr = pq.poll();
ans[k][0] = curr.x;
ans[k][1] = curr.y;
}
return ans;
}
}
// Version 2
class Solution1 {
public ArrayList<ArrayList<Integer>> kClosest(int[][] points, int k) {
Arrays.sort(points, (p1, p2) -> {
int dist1 = p1[0] * p1[0] + p1[1] * p1[1];
int dist2 = p2[0] * p2[0] + p2[1] * p2[1];
return Integer.compare(dist1, dist2);
});
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
for (int i = 0; i < k; i++) {
int[] point = points[i];
ArrayList<Integer> pointList = new ArrayList<>();
pointList.add(point[0]);
pointList.add(point[1]);
res.add(pointList);
}
return res;
}
}Advertisement
Was this solution helpful?