Kth Closest Point in an Array

题目:
给出2D平面上的N个点,求离原点最近的k个点。

解题思路:
用maxHeap来做

代码:

static class Point implements Comparator{
    int x;
    int y;
    public int getDistance(){
        return (int)Math.abs(Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)));
    }
    @Override    public int compare(Object o1, Object o2) {
        return ((Point)o2).getDistance() - ((Point)o1).getDistance();
    }
    public Point(int x, int y){
        this.x = x;
        this.y = y;
    }
}
public static Point findKthLargest(Point[] nums, int k) {
    PriorityQueue<Point> q = new PriorityQueue<>((i, j) -> j.getDistance() - i.getDistance());
    for(Point p : nums){
        q.offer(p);
    }
    for(int i = 0; i <= k - 2; i++){
        q.poll();
    }
    return q.poll();
}

public static void main(String[] args){
    Point p1 = new Point(1, 1);
    Point p2 = new Point(2, 2);
    Point p3 = new Point(3, 3);
    Point p6 = new Point(6, 6);
    Point p5 = new Point(5, 5);
    Point p4 = new Point(4, 4);
    Point[] points = new Point[6];
    points[0] = p1;
    points[1] = p2;
    points[2] = p3;
    points[3] = p4;
    points[4] = p5;
    points[5] = p6;
    Point rst = findKthLargest(points, 2);
    System.out.println(rst.x + " " + rst.y);
}



Comments

Popular Posts