這是一段如何:
- 新建class數(shù)據(jù)結(jié)構(gòu)
- 復(fù)寫PriorityQueue的Comparator
- 如何新建int array并賦值
的演示代碼场仲;
Java 默認 PriorityQueue 會將最小的值pop,復(fù)寫Comparator的時候在A>B時return -1就可以讓PriorityQueue每次pop出最大的值荷憋,符合本題的需求
import java.util.*;
class priorityQ {
public int[][] kClosest(int[][] points, int K) {
int length = points.length;
if(length <= K){return points;}
PriorityQueue<Point> queue = new PriorityQueue<>(new PointComparator());
for(int i = 0; i < length; i++){
Point tmp = new Point(points[i]);
queue.add(tmp);
while(queue.size() > K){
queue.poll();
}
}
int[][] ans = new int[K][2];
for(int j = 0; j < K; j++){
ans[j] = queue.poll().reformat();
}
return ans;
}
class Point{
private int x;
private int y;
private int distance;
private int[] point;
Point(int[] point){
this.x = point[0];
this.y = point[1];
this.distance = this.x * this.x + this.y * this.y;
this.point = point;
}
int distance(){
return this.distance;
}
int[] reformat(){
return this.point;
}
}
class PointComparator implements Comparator<Point>{
public int compare(Point point1, Point point2){
if(point1.distance > point2.distance){
return -1;
}
else if(point1.distance < point2.distance){
return 1;
}
else{
return 0;
}
}
}
public static void main(String[] args){
int[][] points = {{-1,3},{2,2},{5,7},{6,6}};
priorityQ qQ = new priorityQ();
int[][] reply = qQ.kClosest(points, 2);
for(int[] tmp : reply){
System.out.println(Arrays.toString(tmp));
}
}
}