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

后端开发刷题 | 最小的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;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Centos中dnf和yum区别对比
  • 移动开发(三):使用.NET MAUI打包第一个安卓APK完整过程
  • Qt:关于16进制数转化那些事
  • 软件测试面试八股文(含文档)
  • 算法练习题26——等差素数数列 (2017年蓝桥杯试题B)
  • 业务数据批量插入数据库实践
  • Java读取输入流(比如文件、网络资源等)并将数据输出到本地文件
  • Redis6.0.9配置redis集群
  • PL/SQL程序设计入门
  • 鸿蒙OS 线程间通信
  • 面经 | css
  • canvas练习画太阳花
  • 数据增强:提升机器学习模型性能的利器
  • 【Python百日进阶-Web开发-FastAPI】Day805 - FastAPI的请求体
  • Debian 12上安装google chrome
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • C# 免费离线人脸识别 2.0 Demo
  • Javascript 原型链
  • JavaWeb(学习笔记二)
  • JS函数式编程 数组部分风格 ES6版
  • oschina
  • PHP变量
  • Python进阶细节
  • Spring Cloud Feign的两种使用姿势
  • Webpack 4x 之路 ( 四 )
  • Web标准制定过程
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 看域名解析域名安全对SEO的影响
  • 模型微调
  • 前端学习笔记之观察者模式
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 思考 CSS 架构
  • 应用生命周期终极 DevOps 工具包
  • Python 之网络式编程
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #ifdef 的技巧用法
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (1)(1.13) SiK无线电高级配置(五)
  • (C#)获取字符编码的类
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (备份) esp32 GPIO
  • (第二周)效能测试
  • (离散数学)逻辑连接词
  • (六)Hibernate的二级缓存
  • (循环依赖问题)学习spring的第九天
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)3D模板阴影原理
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • (自用)网络编程