Find K nearest Points
按距离的从小到大排 (2,2) (2,2) (4,4) 在PriorityQueue; 出来也是从大到小出来 因为PriorityQueue (4,4)先出来!
class Point {
public int x;
public int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
public class Solution{
public Point[] Solution1(Point[] array, Point origin, int k){
Point[] res = new Point[k];
int index = 0;
PriorityQueue<Point> pq = new PriorityQueue<Point>(k,new Comparator<Point>(){
public int compare(Point a,Point b){
return (int) (getDistance(b,origin)- getDistance(a,origin));
}
});
for(int i =0; i<array.length;i++){
pq.offer(array[i]);
if(pq.size()>k){
pq.poll();
}
}
while(!pq.isEmpty()){
res[index++] = pq.poll();
}
return res;
}
public double getDistance(Point a, Point b){
return Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
public static void main(String args[]) {
Solution test = new Solution();
List<Point> list = new ArrayList<Point>();
Point[] p = new Point[5];
Point p2 = new Point(2, 2);
Point p4 = new Point(4, 4);
Point p3 = new Point(2, 2);
Point p1 = new Point(6, 6);
Point p5 = new Point(5, 5);
p[0] = p1;
p[1] = p2;
p[2] = p3;
p[3] = p4;
p[4] = p5;
Point origin = new Point(0, 0);
int k = 3;
Point[] kPoints = test.Solution1(p,origin,3);
for(int i = 0; i < kPoints.length; i++) {
System.out.print("(" + kPoints[i].getX() + ", " + kPoints[i].getY() + ")");
if(i < kPoints.length- 1)
System.out.print(", ");
}
}}