找出数组中第k大小的数
来源:互联网 发布:房地产库存数据 编辑:程序博客网 时间:2024/05/22 00:11
写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。
比较容易想到的是,找第k大的数:
第1大的数:需要遍历数组,找到排名第1的数
第2大的数:需要遍历数组,找到排名第1和第2的数
...
所以如果对空间没要求的话,可以用一个k大小的数组B保存最大的前k个元素。
遍历原数组,将元素插入到B中,就可以筛选出最大的前k个元素。
代码可以如下实现:
这个算法的时间复杂度为O(n*logk),空间负责度为O(k)。
那除了一个一个插入,还有其他的思路,其实我们前面的想法是保留前K个元素,还有种想法是去掉n-k个小的元素,而怎么能更快的
区分出一个数组中的大元素和小元素呢,可以想到快排中的partition
那我们有下面的算法:
将原数组分为2组,其中一组中元素>另一组元素,那如果大组的长度大于k,那第k个大的元素肯定在大组中,相反肯定在小组中,这样就缩短了搜索的长度。
可以看到,使用快排中的分区思想,平均每次可以缩短1/2,最差情况则是每次缩短1个元素。
这个算法的平均时间复杂度为O(logn),最差为O(n)。
- 找出数组中第k大小的数
- 找出数组中第k大小的数,输出数所在的位置
- 写一段程序,找出数组中第k大小的数,输出数所在的位置。
- 面试题-找出数组中第k大小的数,输出数所在的位置
- 写一段程序,找出数组中第k大小的数,输出数所在的位置。
- 找出数组中第K大的数
- 找出数组中第k大的数
- 找出数组中第K个最大的数
- 找出数组中第 K 大的数
- 找出第K大的数<数组>
- 求数组中第K个大小的数
- 编程珠玑 第十一章 第9题 从数组中找出第K小的数
- 无序数组找出其中的第K大的数
- 数组试题---找出第k大的数
- 面试题—— 找出一个无序整型数组中第k大的数。
- 算法导论:快速找出无序数组中第k小的数
- 找出两个排序数组中排在第k位置的数
- 利用快速排序思想找出数组中第K大的数
- Android(OPhone) 学习笔记 - 定位(2)
- 初学python后感
- 今达电网技改及检修预算软件
- 实模式,保护模式与V86模式
- 热电偶的作用原理
- 找出数组中第k大小的数
- C++监测资源泄漏(二) ---- Linux 进程内存布局
- [更新]Android中引入第三方Jar包的方法,测试可行
- 关于23种设计模式的有趣见解
- 编程模拟自动机的实现方法(用状态转换图)
- SQL SERVER 2005/vs2008快捷键
- 检查Xalan版本
- session的在子页翻页时候的应用
- Android ListView控件基本用法