对用大顶堆处理得到的top-K高赞的方法进行小优化,因为那样增加元素进list非递增形式
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> arr = new ArrayList<Integer>();
if(input.length<k||k==0)return arr;
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(k, new Comparator<Integer>(){
//注意重写Integer要注意,不要写成int
public int compare(Integer e1, Integer e2){
return e2.compareTo(e1);
}
});
for(int i=0;i<input.length;i++){
if(pq.size()!=k){
//添加错误返回false而不是抛出异常,这比add抛出异常不一样
pq.offer(input[i]);
}else if(input[i]<pq.peek()){
pq.poll();
pq.offer(input[i]);
}
}
//按顺序优化
while(pq.size()>0){
arr.add(0, pq.poll());
}
return arr;
}
}
/* 快速排序的方法
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
quickSort(input,0,input.length-1);
int i=0;
while(i<k){
arr.add(input[i]);
i++;
}
return arr;
}
void quickSort(int []arr,int left,int right){
if(left>=right)return;
int temp = arr[left];
int low=left,high=right;
while(left<right){
while(arr[right]>=temp && right>left)right--;
arr[left]=arr[right];
while(arr[left]<=temp && left<right)left++;
arr[right]=arr[left];
}
arr[right]=temp;
quickSort(arr,low,right-1);
quickSort(arr,right+1,high);
}
}*/