当前位置: 首页 > article >正文

后端开发刷题 | 最小的K个数(优先队列)

描述

给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。

数据范围:0≤k,n≤10000,数组中每个数的大小0≤val≤1000

要求:空间复杂度 O(n) ,时间复杂度 O(nlogk)

示例1

输入:

[4,5,1,6,2,7,3,8],4 

返回值:

[1,2,3,4]

说明:

返回最小的4个数即可,返回[1,3,2,4]也可以        

示例2

输入:

[1],0

返回值:

[]

示例3

输入:

[0,1,2,1,2],3

返回值:

[0,1,1]

思路分析:

该题可以使用优先队列PriorityQueue来解决这个问题,

因为PriorityQueue添加进去的数据会默认自然排序,想以升序检索元素。在这种情况下,优先队列的头是最小的元素。检索到该元素后,下一个最小的元素将成为队列的头。

那么可以把input数组添加进去,然后循环取优先队列的头元素,添加进去集合re里面。

代码:

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> re=new ArrayList<>();
        if(k==0||input.length==0) return re;
        PriorityQueue<Integer> q=new PriorityQueue<>();
        for(int i=0;i<input.length;i++){
            q.add(input[i]);
        }
        for(int i=0;i<k;i++){
            re.add(q.poll());
        }
        return re;
    }
}

http://www.kler.cn/a/317753.html

相关文章:

  • Java结合ElasticSearch根据查询关键字,高亮显示全文数据。
  • C++单例模式与多例模式
  • 2024 年 Apifox 和 Postman 对比介绍详细版
  • 字节跳动Android面试题汇总及参考答案(80+面试题,持续更新)
  • 前端垂直居中的多种实现方式及应用分析
  • 大语言模型:解锁自然语言处理的无限可能
  • Github上开源了一款AI虚拟试衣,看看效果
  • 20240924软考架构-------软考191-195答案解析
  • iOS 18 正式上線,但 Apple Intelligence 還要再等一下
  • 完结马哥教育SRE课程--服务篇
  • 02【Matlab系统辨识】白噪声
  • 【论文阅读】Act3D: 3D Feature Field Transformers for Multi-Task Robotic Manipulation
  • CSS 复合选择器简单学习
  • 128页4W字精品文档 | 某智慧能源集团数字化管理平台项目建议书
  • python:django项目知识点02——搭建简易授权码核销系统
  • Llama 3.1 技术研究报告-3
  • Superset 使用指南之优化数据可视化性能与扩展
  • SpringBoot整合InfluxDB(实战)
  • 视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解
  • 力扣6 N字形变换
  • Python 方法传参详解
  • 【裸机装机系列】11.kali(ubuntu)-优化-扩展root分区存储空间
  • 快递预约取件API接口代码
  • 手机上轻松解压并处理 JSON 文件
  • [单master节点k8s部署]22.构建EFK日志收集平台(一)
  • 网站服务器怎么计算同时在线人数?