BM46_题解 | #最小的K个数#

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

解题思路:

1、关键用到了PriorityQueue,最大堆,这是我日常编程中没有用到的数据结构。

具体步骤:

1、最大堆录入input数组的前k个元素。

2、再用这个堆不断跟input数组剩下的 n-1-k个元素对比。

3、转堆成list返回结果

import java.util.*;


public class Solution {
    /**
     * @param input int整型一维数组 
     * @param k int整型 
     * @return int整型ArrayList
     */
    public ArrayList<Integer> GetLeastNumbers_Solution (int[] input, int k) {  
       ArrayList<Integer> res =  new ArrayList<Integer>();
        if(k > input.length || k==0 ) {
            return res;
        }
        
        PriorityQueue<Integer> q = new PriorityQueue<>((o1, o2)->o2.compareTo((o1))); 
        for(int i=0; i<k; i++) {
            q.offer(input[i]);
        }

        for(int i=k; i<input.length; i++) {
            if(q.peek()>input[i]) {
                q.poll();
                q.offer(input[i]);
            }
        }

        while(!q.isEmpty()) {
            res.add(q.poll());
        }
        return res;
    }
}
全部评论

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务