zoukankan      html  css  js  c++  java
  • 最小的k个数 --剑指offer

    题目描述

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
    思路:用大顶堆来保存前k个指 然后从下一个值开始与堆顶元素比较 如果小的话 堆顶出去 这个小的数进来。
     
    import java.util.*;
    public class Solution {
        public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
            ArrayList<Integer> result=new ArrayList<>();
            if(k > input.length || k <= 0){
                return result;
            }
            int length=input.length;
            PriorityQueue<Integer> queue = new PriorityQueue<>(k, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return  o2.compareTo(o1);
                }
            });
            for(int i =0;i<input.length;i++){
                if(queue.size() < k){
                    queue.offer(input[i]);
                }else {
                    if(input[i] < queue.peek()){
                        queue.poll();
                        queue.offer(input[i]);
                    }
                }
            }
            for(Integer integer:queue){
                result.add(integer);
            }
            return  result;
        }
    }
  • 相关阅读:
    demo_38 关注页导航栏实现
    demo_37 评论列表实现_02 封装popup 及 格式化时间
    demo_37 评论列表实现_01
    SaaS
    rsyncd脚本
    rsyncd
    MySQL高可用--MHA安装
    正向代理
    zabbix 一键部署
    kvm安装
  • 原文地址:https://www.cnblogs.com/nlw-blog/p/12435551.html
Copyright © 2011-2022 走看看