Top-K最小值
最小的K个数
http://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf
对用大顶堆处理得到的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); } }*/