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);
    }
}*/
全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务