(最小K个数)设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]

提示:
0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))

class Solution {
    public int[] smallestK(int[] arr, int k) {
    	//如果arr数组为空或者K<=0,则返回[]
        if(arr==null||k<=0){
            return new int[0];
        }
        
        PriorityQueue<Integer> p=new PriorityQueue<>(arr.length);
        //1.将arr中的数据放到优先级队列中
        for(int i=0;i<arr.length;++i){
            p.offer(arr[i]);
        }
        //2.依次取优先级队列中前K个元素
        int[] ret=new int[k];
        for(int i=0;i<k;++i){
            ret[i]=p.peek();
            p.poll();
        }
        return ret;
    }
}

你可能感兴趣的:(Java)