数据结构与算法——有1亿个整数,找出最大的1000个,要求时间越短越好,空间占用越少越好
2016-01-16 21:20
267 查看
有1亿个整数,找出最大的1000个,要求时间越短越好,空间占用越少越好(迅雷笔试)
首先要明白1亿个整数占用多大的内存,按每个整数4个字节来算,用400000000B,大约400000KB,大约400MB,可见不能直接将那么多的数据直接拷贝到内存进行排序算法。思路:
1、读入前1000个整数,建立最小堆。O(1)2、然后接着读入剩下的整数,将每个读入的整数与该最小堆中的最小值进行比较(与堆顶进行比较),如果比最小值还要小,则继续读入剩下的数据。O(N)
3、如果读入的数据比最小值大,则删除最小值,并将该数据插入到最小堆的合适位置。O(log1000)
4、重复步骤2,直到将剩下的数据全部读完。
5、按中序遍历输出该最小堆中的数据,也就是按从小到大输出最大的1000个数据。
该算法的时间复杂度为O(N),空间复杂度为1000,其实是常数。
参考: http://blog.csdn.net/linux_ever/article/details/50488816 http://blog.csdn.net/linux_ever/article/details/50493457 http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552012821103039741 http://www.codeweblog.com/the-art-of-programming-by-july-%E6%B5%B7%E9%87%8F%E6%95%B0%E6%8D%AE%E4%B9%A0%E9%A2%98%E8%A7%A3%E7%AD%94/ http://www.kancloud.cn/kancloud/the-art-of-programming/41612
相关文章推荐
- 21 反转句子顺序
- 数据结构_7:图算法 :c++/STL
- 数据结构_7:图算法 :最短路径
- 数据结构_7:图算法 :图的最小生成树
- 小菜一步一步学数据结构之(四)单链表
- 数据结构_7:图算法 :图的遍历
- 数据结构之单链表常见操作 C
- vxworks源码剖析- 数据结构篇一(双向链表)-转
- 数据结构_7:图算法 :图的存储
- 半边数据结构
- 数据结构-------顺序表的实现
- 算法系列(1)-数据结构
- 飞龙的程序员书单 – 数据结构、算法
- Java数据结构之迭代器
- 20 找出第1500个丑数
- LCT(Link Cut Tree)学习小记
- 数据结构之数组和字符串的反转java实现
- Java数据结构之linkedhashset
- 数据结构优化连边
- 学习笔记------数据结构(C语言版)链表应用~一元多项式求和