K Closest Points
ID: 612; medium; *
Solution 1 (Java)
/**
* Definition for a point.
* class Point {
* int x;
* int y;
* Point() { x = 0; y = 0; }
* Point(int a, int b) { x = a; y = b; }
* }
*/
public class Solution {
/**
* @param points: a list of points
* @param origin: a point
* @param k: An integer
* @return: the k closest points
*/
public Point[] kClosest(Point[] points, Point origin, int k) {
if (points == null || points.length < k)
return new Point[0];
Queue<Point> maxheap = new PriorityQueue<>(k, new Comparator<Point>() {
public int compare(Point p1, Point p2) {
int diff = dist(origin, p1) - dist(origin, p2);
if (diff != 0)
return diff;
if (p1.x != p2.x)
return p1.x - p2.x;
return p1.y - p2.y;
}
});
// O(nlogn)
for (Point p : points) {
maxheap.offer(p);
}
// O(klogn)
Point[] res = new Point[k];
for (int i = 0; i < k; i++) {
res[i] = maxheap.poll();
}
return res;
}
private int dist(Point p1, Point p2) {
return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y);
}
}Notes
Solution 2 (Java)
Notes
Solution 3 (Java)
Notes
Last updated