【算法】寻找K个最大的数组

查找无序数中最大k个数 解法一:该解法是大部分能想到的,也是第一想到的方法。假设数据量不大,可以先用快速排序或堆排序,他们的平均时间复杂度为O(N*logN),然后取出前K个,时间复杂度为O(K),总的时间复杂度为O(N*logN)+O(K).         当K=1时,上面的算法的时间复杂度也是O(N*logN),上面的算法是把整个数组都进行了排序,而原题目只要求最大的K个数,并不需要前K个数有限,也不需要后N-K 阅读详情
 1.问题描述:

    有一堆未排序的数,前选择其中最大的K个进行输出。

2.问题解析:

    快速排序:O(nlogn)

   堆排序:O(nlogn)

   但是老师说一般面试的答案是堆排,我也估计会快一些。

3.问题流程:

   堆,是指根节点大于(或小于)其子节点的完全二叉树;最优二叉树是指左子树<根节点<右节点的二叉树。

   先构建一个大根堆,然后取出堆顶元素,将堆顶和堆尾元素互换,维护大根堆。

   建堆的过程是从数组一半,到最开始,每次刷堆。

   刷堆的过程是,记录下待刷元素,然后于其子节点中比较大的那个进行比较,如果子节点大,则互换,并移动父子指针,直到最后。

4.代码:   

void heapSort(int unSort[],int n,int i) 
{
	int x=unSort[i];
	int j=2*i+1;
    
	while(j<=n-1)
	{
		//×¢ÒâÔ½½çÅжÏ
		if ((j<n-1)&&(unSort[j]<unSort[j+1])) j=j+1;

		if (unSort[j]>x)
		{
			unSort[i]=unSort[j];
			i=j;
			j=2*i+1;
		}
		else
			j=n;
	}
	unSort[i]=x;
}


int * SelectKNumber(int unSort[],int k,int length)
{
    int i;
	int *Sort;
	
	Sort=new int[k];
  
	for (i=length/2;i>=0;i--)
	{
		heapSort(unSort,length,i);
	}

	for (i=0;i<k;i++)
	{
		Sort[i]=unSort[0];
		unSort[0]=unSort[length-i-1];
		unSort[length-i-1]=Sort[i];
		heapSort(unSort,length-i-2,0);
	}

	return Sort;
}
Java实现 LeetCode 215. 数组中的第K个最大元素 215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 cla... 阅读详情

相关推荐

从零构建安全通信:mbedtls与ECDSA在嵌入式系统中的实战指南

本文详细介绍了如何在嵌入式系统中使用mbedtls和ECDSA实现安全通信,重点探讨了ECDSA相比RSA的优势、mbedtls的模块化裁剪策略、密钥安全存储方案以及完整的签名验签流程。通过实战案例和优化技巧,帮助开发者在资源受限环境下构建高效可靠的安全通信系统。

weixin_28338005的博客 685

Java算法篇在一个int数组中寻找最大的k个数字

背景 在一个int数组中,寻找最大的k个数字,时间复杂度是O(n)。 数组不大情况下 思路: 类似于基本排序中的基数排序,利用空间换时间,待排序数组的值是新数组的索引,新数组的值就是出现的次数,考虑重复的情况 新数组如果值为空,则表示这个索引值在原来数组根本不存在,如果大于1则该数字在原来数组出现多次 第一步: 找到原数组最大值,利用比较计算 第二步: 新建数组,size是第一步中...

Just Do It! 2245

MNE-python 进行源定位教程(一)配置环境

根据MNE官网提供的教程进行复现,遇到各种问题的记录。 配置环境 python3.8 + Anaconda + pycharm MNE-Python 是一个开源 Python 模块,用于处理、分析和可视化功能性神经影像数据(EEG、MEG、sEEG、ECoG 和 fNIRS)。 根据官方建议,将MNE-python安装在anaconda的虚拟环境中。 1. 安装Anaconda 过程点击这里 2. 配置pycharm 2.1 导入MNE-python工具包 在pycharm的菜单栏里打开VCS-Create

zQIANYUN的博客 3173

可视化图解算法51:寻找第K大(数组中的第K个最大的元素)

对于数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。

weixin_42117918的博客 1304

【IPAM】Netbox docker模式版本升级

NETBOX 是一个开源的网络资源管理系统,主要用于管理 IP 地址、机架、设备、接口等网络资源信息。下面是 NETBOX 的功能、优点和缺点的详细介绍。

u012153104的博客 1329

ThinkAdmin后台Getshell

通过文件包含或者图片马的方式Getshell。修改其可允许的文件类型,php不允许,可添加。系统管理->系统参数配置->本地服务器存储。

hot_milk1的博客 1864

0409-算法复盘 数组中相加和为0的三元组、寻找第k大、跳台阶、子数组的最大累加和问题

1. 数组中相加和为0的三元组 给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。 注意: 三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c) 解集中不能包含重复的三元组。 例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20) 输入 [-2,0,1,1,2] 返回值 [[-2,0,2],[-2,1,1]] 思路:由于不能包含重复的三元组,所以要去重,去重最

Gopuwe的博客 253

NumPy 与 Pandas 的详细应用(含实例)

本文系统介绍了Python数据分析中NumPy和Pandas两大核心库的应用。NumPy专注于高效数值计算,提供多维数组和向量化运算功能;Pandas则擅长结构化数据处理,支持数据清洗、分组统计等操作。文章详细讲解了库的安装、基础操作(数组/DataFrame创建、索引切片)、进阶功能(缺失值处理、分组聚合),并通过电商销售分析案例演示了实际应用场景。最后总结了二者的协同优势:NumPy负责底层数值计算,Pandas处理高级数据操作,配合使用可显著提升数据处理效率。建议读者从基础操作入手,结合实际案例练习,

weixin_42030577的博客 2298

窥探算法之美妙——寻找数组中最小的K个数&python中巧用最大堆

原文发表在我的博客主页,转载请注明出处 前言 不论是小算法或者大系统,堆一直是某种场景下程序员比较亲睐的数据结构,而在python中,由于数据结构的极其灵活性,list,tuple, dict在很多情况下可以模拟其他数据结构,Queue库提供了栈和队列,甚至优先队列(和最小堆类似),heapq提供了最小堆,树,链表的指针在python中可以当作最普通的变量,所以python大法好。。。使用pyth...

weixin_30809173的博客 176

51单片机———UART串口通信

传统理解就是信息的传输与交换。单片机与单片机之间,单片机与电脑之间,以及单片机与各式各样的模块之间都可以进行通信。如果没有通信,那么单片机的功能仅仅局限于它本身,它没办法从其他设备获取有用信息,也无法将自己产生的信息告诉其他设备,这样子单片机与外围器件的合作就会收到限制,没办法完成更多的功能,就像一个没办法拓展业务的公司。:实现我们程序当中写的P0=0xFC,就是一次同时对8位进行信号的输出;习惯上,我们还称P0、P1、P2、P3为单片机的4组并行总线:实现低位先发 高位在后。

m0_74225397的博客 3295

uniapp:在map地图组件上添加控件,在地图上添加浮层展示自定义按钮或元素,uniApp如何在Map组件地图上添加悬浮在上面的图标/图片(全平台兼容安卓苹果app、H5网页、微信小程序、nvue)

uni-app的map添加控件问题,uniapp实现地图展示控件,uniapp小程序如何在map组件上增加按钮,uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,Uniapp腾讯地图添加控件,uniapp百度地图添加控件,地图上展示控件并可以点击,在地图上展示控件信息,uniapp map地图怎么向地图上增加工具栏,使用cover-view将控件在地图上展示,解决uniapp map上添加浮层无法显示问题,不显示怎么办,css样式不生效,地图等最高层

✅ 精选推荐文章 3230

寻找数组中最大的K个数

题目 编程之美上的寻找N个数中最大的前K数,给出了一种算法,我认为比较好: 算法是这样写的: 假设N个数存储在数组S中,我们从数组S中随机选出一个元素X,把数组分为两部分Sa和Sb.Sa中的元素都大于X,Sb中的元素都小于X,这时,有两种可能性: 1.Sa中元素的个数小于K,Sa中所有的数和Sb中最大的K-|Sa|个数(|Sa|指Sa中元素的个数)就是数组S中最大的K个数。 2.Sa中元

Boyhou 的专栏 1599

杰理AC695N系列芯片 LED7数码管使用教程

杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。

qq_42014563的博客 1345

数组中的第k个最大元素(python实现)

题目描述: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 来源:力扣(LeetCode...

weixin_44512019的博客 1363

IDEA的使用指南

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数组中的第K个最大元素(TOP-K问题)

leetcode215. 数组中的第K个最大元素,小根堆/快排思想

热爱C++和golang的学生 4147

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【算法】寻找最大k个数

如何在一个无序的数组中寻找最大的k个数? 对于这个问题, 最容易想到的办法就是给数组排个序, 如果使用快速排序,时间复杂度是O(nlogn), 但事实上我们只需要寻找这k个数,排序的方法显然做了多余的事情。 那么,能不能在这个基础上优化一下呢? 基于快速排序的优化 O(klogn) 我们知道,快速排序的思想是:在数组中选中一个支点,以这个支点将数组划分成两部分s1, s2,保证s1所有元素小于支点...

doctor_oyy的博客 545

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

leetcode215. 数组中的第K个最大元素堆排序

leetcode215. 数组中的第K个最大元素 ,堆排序

陈鱼落雁的博客 253

超详细!详解一道高频算法题:数组中的第 K 个最大元素

来自公众号:五分钟学算法今天分享的题目来源于 LeetCode 第 215 号问题,是面试中的高频考题。题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序...

mobilehub 217

数组中的第k个最大元素

在快排函数中添加了一个参数k,最后直接返回该位置的元素。其实主要还是快速排序的实现。给定一个整数数组和一个整数k,请返回数组中第k个最大的元素。即如果我们按照从小到大排序,那么返回数组第n-k位置的元素。如果我们按照从大到小排序,那么返回数组第k-1位置的元素。在这里使用两种排序方法。这一题重要的是排序。

weixin_54143563的博客 273

每日刷题(有效括号序列,滑动窗口最大值,最小的K个数,寻找第K大)

算法

chaodddddd的博客 1660

算法实现之数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

handy周 811

数组中的第K个最大元素

在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 分析: 将...

Random的博客 148

寻找数组最大K个数

1、问题描述 给定一个数组

Wallace 858

寻找数组中的第K个最大元素

题目来自leetcode的215道题,寻找数组中的第K个最大值,如果要寻找一个数组的最大值,可能很简单,但是寻找第K个最大值,可能就不是那么简单了,当然这道题目有多个解法 第一种解法,排序法,想要找到第K大的元素,比较好的方法可能是排序法,经过排序的数组可以直接通过索引找到第K个值,这个值自然就是数组中第K大的值 在这个数组中,如果要寻找第2大的值,那么结果就是5 在这道题中,可以采用各种排序法,例如归并排序和快速排序等,很明显算法的时间复杂度是O(nlogn) 那么通过排序就能完成这道题目了 第二种解法

weixin_44837750的博客 3643

寻找最大的K个数--递归解法

算法思想:使用快排中的思想,随机从数组中选择一个元素x,将数组元素分成两部分Sa和Sb,其中Sa>x,Sb 1. Sa中元素个数小于K,Sa中所有的数和Sb中最大的K-length(Sa),就是S中最大的K个数; 2. Sa中元素个数大于或者等于K,则需要返回Sa中最大的K个数。 不断进行递归,能够得到问题的解。 //寻找最大的K个数 #include #include using n

陈氏春秋 1719

LeetCode215. python实现:数组中的第K个最大元素问题☆☆

目录 一、问题 二、解题思路 三、python具体实现 四、题外记 一、问题 在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 二、...

积跬步,慕至千里的博客 2693
上一篇: SDL 介绍
下一篇: [转载]如何提高阅读源代码的效率
forestLight
博客等级 码龄15年 24粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值