最小的k个数

Python:最小的 k 个数 牛客网上的剑指 offer的在线编程: 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 # -*- coding:utf-8 -*- ''' 最小的k个数 题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 ''' c 阅读详情

题目描述

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

思路:

构建一个k大小的大根堆,遍历input数组,在堆未满时,直接存入元素,在堆已满时,则比较堆顶元素与带插入元素,若带插入元素更小,则替换堆顶元素。



import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;

public class GetLeastNumbers_Solution {

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

    public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        if(input.length < k || k==0){
            return list;
        }
        //优先队列默认是最小堆,此做法是构建一个大根堆
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        };
        PriorityQueue<Integer> queue =  new PriorityQueue<>(k,comparator);

        //构建一个k大小的大根堆,遍历input数组,在堆未满时,直接存入元素,在堆已满时,
        //则比较堆顶元素与带插入元素,若带插入元素更小,则替换堆顶元素。
        for(int i = 0 ; i<input.length ;i++){
            if(i<k){
                queue.add(input[i]);
            }
            else {
                if(input[i] < queue.peek()){
                    queue.remove();
                    queue.add(input[i]);
                }
            }
        }
        while (!queue.isEmpty()){
            list.add(queue.poll());
        }
        return list;
    }
}



小结:

优先队列默认为最小堆,优先队列构建最大堆的方法。

 Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        };
        PriorityQueue<Integer> queue =  new PriorityQueue<>(k,comparator);

优先队列主要的方法有:

	queue.add()   queue.offer();  //添加 ,前者添加失败 抛异常  后者添加失败 返回null
	queue.peek()  queue.element(); //查看堆顶元素但不移除 前者查看失败 抛异常 ,后者 返回null
	queue.remove() queue.poll();  // 移除堆顶元素  , 前者移除失败 抛异常 后者返回null
最小的 K 个数总结 最小的 K 个数 题目描述 给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。(数据顺序不限) 解法一:先排序,后选择 使用快排将数组进行升序排序,然后取出前 K 个数即可。 void swap(vector<int>& array, int i, int j) { if (i != j) { int temp = array[i]; 阅读详情

相关推荐

CESM2 实验笔记

文章目录1. 重新启动1.1 关于重启文件2. RUN_TYPE 初始化运行方式startupbranchhybrid3. branch 或者 hybrid运行的示例4. 其他声明5. 关于RESUBMIT 1. 重新启动 参考: https://bb.cgd.ucar.edu/cesm/threads/how-to-restart-cesm2-1-3-fhist-from-a-backup.5245/#post-36275 适用情况:模型运行因时间不足或其它原因中断,需要继续运行 方法1:将CONTIN

qq_38607066的博客 1万+

剑指offer—寻找数组最小的k个数

题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析:传统的做法可以是o(nlog(n)),就是先排序然后从前面中取出k个值。高效的做法可以实现o(nlogk),借助一个容器,容量k,将数组的读入k个数存放在容器中,然后继续访问数组后面的数,将其后每个数和容器中最大值比较,比最大值小则剔除容器中最大值,同时将该数放入容...

Touch_Dream的博客 448

2024年上市公司ESG评级全解析:六大权威数据源横向对比与应用指南

本文深度解析2024年国内主流ESG评级数据源,包括华证、商道融绿、Wind、富时罗素和彭博,横向对比其覆盖范围、评分逻辑与应用侧重点。文章提供实战指南,帮助投资者与企业根据投资决策、风险管理和学术研究等不同场景,精准选择并有效应用ESG数据,实现从概念到实用分析工具的转变。

weixin_29229055的博客 312

【堆】最小的K个数

输入n个整数,找出其中最小的K个数 解法一: public static List<Integer> getMinKNum(int[] input, int k) { if(null == input || input.length == 0 || k <= 0){ return null; } PriorityQueue<Integer> l...

永生只是一场幻梦 2723

告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南

本文详细解析了Windows 11下Multisim 14.0主数据库连接失败的三大根源,并提供了四步终极解决方案,包括系统环境优化、软件权限配置、注册表修复和网络验证绕过技巧。通过实测数据对比,本方案显著提升了启动速度和稳定性,解决了电子仿真中的常见连接问题。

weixin_33738555的博客 436

STM32输入捕获功能,同时捕获8路波形。

STM32输入捕获功能,使用TIM2和TIM3同时捕获8路波形。 工作上的一个需求,要采集两组控制步进电机的信号。就是采集8个通道的方波,测量频率和计脉冲个数。看起来简简单单的东西,磕磕碰碰搞了两天,走了一些弯路,这里写出来记录一下。顺便理解一下输入捕获个多种用法。 1. 硬件设计 首先看一下用到那些IO口。在STM32手册里找这样TIMx_CHx的就是输入捕获的口了。 这里用了TIM2的4个口和TIM3的4个口。 定义 端口 TIM2_CH1 PA0 TIM2_CH2 PA1 TI

qq_36353009的博客 5126

最小的K个数

结合代码注释的讲解,来分析解决这个问题,或许是一种好办法 文章目录一、题目信息二、题目解析 一、题目信息 题目描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 题目来源:最小的K个数–nowcoder 二、题目解析 class Solution { public: vector<int> G...

Eric_qiushui的博客 216

MICROSAR OS:第一个task是如何执行起来的?

MICROSAR OS是Vector公司开发的符合AUTOSAR OS规范的实时操作系统。本文介绍MICROSAR

humu7733的博客 2571

最小的k个数 — C++实现

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 牛客网题目链接 解题思路 代码实现

Jeaten 945

别再为数据发愁:5分钟理解事件相机原理,并自己动手生成事件图像

本文深入浅出地解析了事件相机的工作原理,并提供了从静态图像生成事件数据的实用方法。通过Python代码示例,读者可以快速掌握如何模拟事件相机的输出,应用于机器人导航、自动驾驶等领域,解决数据获取难题。

weixin_31458015的博客 300

5个实战必备的多模态情感分析数据集(附下载链接与避坑指南)

本文精选了5个实战必备的多模态情感分析数据集,包括CMU-MOSEI、CH-SIMS、UR-FUNNY、MUStARD和IEMOCAP,并提供了详细的下载链接与避坑指南。文章重点介绍了如何高效获取、预处理这些数据集,并自然整合了多模态情感分析的核心热词,旨在帮助研究者和开发者快速启动项目,规避常见陷阱,聚焦模型创新。

yolo5detector的博客 280

n 个数中最小的 k 个数

1. 描述 输入 n 个整数,输出其中最小的 k 个。 2. 解法 一般的方法是用选择排序,直到k个最小的数产生。时间复杂度为O(nk),空间复杂度为O(n)。 或者是对这n个数用快速排序从小到大排好序后,输出前k个数,时间复杂度为O(nlogn),空间复杂度为O(n)。 但若数据量非常庞大,以至于整个内存空间都放不下,上面两种方法就无能为力了。 利用堆排序可以解决

songuo' s home 2013

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

针对以上文件及文件目录介绍其功能特性:Allclean:这是一个脚本或命令,通常用于清理(即删除)所有编译生成的临时文件和目标文件。执行后,可以将编译过程中生成的中间文件和已编译的程序删除,以便重新开始编译或者清理空间。Allwmake:这是一个脚本或命令,用于编译并安装ThirdParty-10目录中的所有软件包。执行此命令会遍历所有子目录,编译其中的软件包并将它们安装到指定位置。这是一个脚本或命令,用于编译和安装Libccmio库。

源代码杀手的博客 1998

最小k个数c语言_29.最小的K个数

点击上方蓝字,关注并星标,和我一起学技术.题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。输入实例输入:[4,5,1,6,2,7,3,8], 4返回值:[1,2,3,4]思路这是一道简单题,可以先把数组的元素排序好,然后取就好了。importjava.util.ArrayList;publicclass...

weixin_39965794的博客 207

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最小K个数

反转链表题目描述分析与解答 题目描述 设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例: 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4] 提示: 0 <= len(arr) <= 100000 0 <= k <= min(100000, len(arr)) 分析与解答 想简单点,就是排序问题,然后输出前k个元素即可。我们要掌握的是排序算法,因为快速排序是面试最常考的排序算法,也是各个算法库基本都会内置的排序

weixin_36389889的博客 353

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数组中最小的K个数

思路:1、排序,取前k个元素;O(NlogN);2、分治,O(n),利用快排的思想;3、用set 维护最小的k个数,O(NlogK),可处理海量数据。

王二的专栏 1127

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

n个数里最小的k个

链接 来源:牛客网 [编程题]n个数里最小的k个 找出n个数里最小的k个 输入描述: 每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。 输出描述: 输出n个整数里最小的k个数。升序输出 示例 输入 3 9 6 8 -10 7 -11 19 30 12 23 5 输出 -11 -10 3 6 7 解题思路: 只要将得到的数组排序好然后输出前k个最小的元素就可以了,...

weixin_44376490的博客 502

寻找最小的k个数

求第k小的数,该算法类主要逻辑在于类似于快排取出临界值p ,partition(int[] arr, int begin, int end),该方法返回临界值p,若k<p,那么最小的k个数一定在p的左边begin...p-1,若k>p,那么最小的k个数一定在p的右边p+..end.若相等,返回第k小的元素,arr[p-1];刚开始有序数组放入第一个元素也是有序的因此i从1开始,j指向i-1,该位置是有序数组的末尾位置,要跟有序数组里面所有元素比较插入到适当位置,因此j--,j+1指向新加入的元素。

qq_61551902的博客 786

java——最小的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)

m0_60867520的博客 689

最小的k个数python实现

一、问题:最小的K个数 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 二、解题思路 思路1:最简单的方案,对数组进行排序,取最小的k个 思路2:借鉴快速排序的思想,找partition的基准点povit,比较povit和k值的大小 思路3:大数据处理的思想,创建一个大小为k的数据容量,如果容器未满,直接存入容器中,如果容器已满, 和最大值进行比较,替换 思路4:构建堆,返回最小的k个元素 三、程序实现 impor

霜叶的博客 1676
上一篇: 字符串顺序排列
下一篇: 整数中1出现的次数(从1到n整数中1出现的次数)
coder_flag
博客等级 码龄9年 2粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值