public Point[] kClosest(Point[] points, Point origin, int k) {
    if(points == null) return points;
     final Point o = origin;
 PriorityQueue<Point> pq = new PriorityQueue<Point>(k, new Comparator<Point>(){
    @Override
    public int compare(Point a, Point b){
          return getDistance(b, o) - getDistance(a, o);//Pay Attention 相反的!!
      }
  });

     for(Point p : points) {
         pq.offer(p);
           if(pq.size() > k)
             pq.poll();
      }

    if(k >= points.length) {
       k = points.length;
    }
    Point[] ans = new Point[k];
     while(!pq.isEmpty()) {
     ans[--k] = pq.poll();//Pay Attention!! k--
     }
    return ans;
   }

public static int getDistance(Point a, Point b){
     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}

results matching ""

    No results matching ""