找第K大数的一些小算法技巧;
来源:互联网 发布:理智与情感 知乎 编辑:程序博客网 时间:2024/04/20 07:26
上述算法功能:
输入一系列可重复的数, 找出第K大的数, 重复数字也算作1个.
例如: 2 2 1 4, 第3大的数字是2, 而不是1.
思想:需要找第K大数,只需要建立一个容量为K的最小堆,初始化所有元素都无穷小.
每次读取一个数据,
如果这个数据比堆顶元素大,那么它可以替代堆顶,并用updateHeap维持最小堆的性质.
如果这个数据比堆顶元素小,那么它一定小于所有堆内的元素,所以不必操作.
如果这个数据和堆顶元素一样大, 由于堆顶元素是堆内最小的元素, 所以不必操作,因为如果插入一个与堆顶一样大的元素去替换某一个结点,被替换的结点不会比插入的元素小,所以不能替换.
所以算法主要就是围绕一个最小堆来做的,思想很简单.
稍后补充另一个算法,在此基础上不计算重复的第K大元素.
这个算法的思想是利用空间换时间,当然空间也是相当的小....只要101个位就可以了.
逐次输入成绩,给成绩对应的位做标记. 最后从100分开始计数,一旦计数到达3次,就打印出那个成绩就是第3(不重复)大成绩.
- 找第K大数的一些小算法技巧;
- 随即算法找第K大数
- 找第K大数
- 找第K大数
- sdnu1060.找第K大数
- 「小顶/大顶堆」找第k大数,找第k小丑数, 找杨氏矩阵第k小数
- 为算法考试做准备--快速排序以及找第K大数的实现
- 【模拟】找第k小的数
- 找第k小的数
- sdnuoj 1060 找第K大数
- 找第K大数(ACdream 1099)
- SDNU OJ 1060.找第K大数
- java快排,找第K小的数,找前K个数
- 两个有序数组找第k小的数
- 线性时间找第K小的数
- 快排查找第K小的数
- 【2012河南省队互测】【COGS930】找第k小的数
- 找n个数字中第k小的元素
- 2010年,我发现了淘宝购物省钱的秘密
- Java反射机制(转)
- J2EE项目代码编写规范
- 一些軟件分析和設計方面的書
- PHP查询显示SqlServer中的中文
- 找第K大数的一些小算法技巧;
- java 正则表达式工具类
- MSVC与GCC的差异(收集中)
- 依然是cache
- Apache HTTP Server 与 Tomcat 的三种连接方式介绍
- 『转』度百死去飞秋一个BUG引发的血案
- 轻松破解防盗链
- 程序人生--一个程序员对学弟学妹建议(转)
- Redhat Linux IP地址配置笔记