前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛客网-最小的k个数

牛客网-最小的k个数

作者头像
手撕代码八百里
发布2020-07-28 08:58:26
3120
发布2020-07-28 08:58:26
举报
文章被收录于专栏:猿计划猿计划

题目描述

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

解题思路

代码语言:javascript
复制
package 练习;


import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;

public class Solution {



    static public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {

        ArrayList<Integer> list = new ArrayList<>();


        if(input==null || k>input.length || k==0)
            return list;

        //存放k个值,按从大到小排列
        PriorityQueue<Integer> queue = new PriorityQueue<>(k, Collections.reverseOrder());

        for (int i = 0; i < input.length; i++) {
            //前k个直接存
            if(i<k){
                //PriorityQueue会自动排序
                queue.offer(input[i]);

                //存入list
                list.add(input[i]);

            //前k个之后的进行比较(与最大堆了堆顶元素比较)
            }else{
                //如果第i个元素 < 最大堆的顶元素 就把最大堆的顶元素取出,然后重新把这个小的值存入
                if(queue.peek() > input[i]) {
                    //删除list中这个最大的元素
                    list.remove(queue.peek());
                    //把较上一个小的存入
                    list.add(input[i]);

                    //最大堆也更新
                    queue.poll();
                    queue.offer(input[i]);

                }
            }

        }
//这样也行
//        for (int i=0;i<k;i++){
//            list.add(queue.poll());
//        }

        //返回List
        return list;
    }



    public static void main(String[] args) {
        int[] nums={4,5,1,6,2,7,3,8};
        ArrayList exchange = GetLeastNumbers_Solution(nums,4);

        for (Object o : exchange) {
            System.out.println(o);
        }

    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 解题思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档