• 最小的k个数


    ##题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

    思路

    大根堆存放最小的k个数,建堆复杂度为n,调整堆复杂度lgn。
    时间复杂度O(nlgk),空间复杂度O(k)。

    代码

    import java.util.ArrayList;
    import java.util.PriorityQueue;
    
    public class Solution {
        public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            PriorityQueue<Integer> maxheap = new PriorityQueue<Integer>((x,y) -> y-x);
            if(k > input.length || input == null || k == 0)    return list;
            for(int i = 0; i < k; i++) {
                maxheap.offer(input[i]);
            }
            for(int i = k; i < input.length; i++) {
                if(input[i] < maxheap.peek()) {
                    maxheap.remove();
                    maxheap.offer(input[i]);
                }
            }
            for(Integer m : maxheap) {
                list.add(m);
            }
            return list;
        }
    }
    
  • 相关阅读:
    10.20stark组件已经完工
    webpack3到webpack4
    app埋点
    postman使用
    phantomjs
    nodejieba中文分词
    爬虫--cheerio
    mysql命令(三)
    mysql学习(二)
    mysql安装登录
  • 原文地址:https://www.cnblogs.com/ustca/p/12349184.html
Copyright © 2020-2023  润新知