原题如下:

有一个100G大小的文件里存的全是数字,并且每个数字见用逗号隔开。现在在这一大堆数字中找出100个最大的数出来。

我认为,首先要摸清考官的意图。是想问你os方面的知识,还是算法,或者数据结构。

如果是os: 无疑是外排序算法的选择。100g文件在当前的环境下是无法全部读入内存的。

如果是算法:我觉得这个题考虑排序就是错的,只需要比较。找出最大的即可。

无论是哪种,都不需要一个实际代码的解决方案。只提供思路就可以了。所以,这道题也可以从面试的角度去回答而不是技术层面回答。

至于在技术层面有没有必要研究这个问题,那就是个人有个人看法了。

比较机灵的回答:

继续询问考官:这100g的文件是不是已经排序好了的?

如果已排序,那还不是信手拈来?

比较极端的回答:

请问:
1,你使用的什么操作系统,100G的文件,NTFS的?vista还是win7的?内存有多少大?
2,如果里面的数字小于100个怎么办?
3,如果里面的第一个数字就是100G-198个字节,那么java是无法处理的,请给我一个可以处理的语言出来。
4,我知道你会说假设,但是,程序员的任务是解决实际问题,一切皆以实际问题出发。任何一个理论都是有实际模型的。
5,不知道是谁命的题,我建议他命题严谨点,我不希望有这样的同事或者上级,更不希望将来贵公司因为这样的人毁了前途。

(引用http://topic.csdn.net/u/20091013/10/d5d371dc-6dec-4034-bf31-432a47ffce96.html 22楼 downice)

关于比较数据思路新颖的回答:

如果全都是正整数的话,可以先比较长度,挑出长度最长的一类,然后再排序挑出前100,如果最长的一类不足100个,就在长度-1的一类里选...........

(引用http://topic.csdn.net/u/20091013/10/d5d371dc-6dec-4034-bf31-432a47ffce96.html 3楼 ZX_ARES)

个人比较喜欢的回答:

我把这个算法分为两个阶段。这个是基于概率统计的算法。用统计的方法
有时比专家系统还有效,这是从开复老师的书《世界因你不同》里学到的。

第一,先期学习阶段:

先读入文件中前10万个数(具体多少视情况定),找出其中最大的100个数,
保存在一个数组MaxAry[100]里.(指针链表)

第二,正式查找阶段:

读入文件中一个数,并与MaxAry中最小的数(例如是MaxAry[100])比较。
如果这个数比MaxAry[100]小则读入下一个数继续比较。
如果比MaxAry[100]大的话,则将其排入MaxAry中适当位置,继续读入下个数……

算法解释:
10万个数中选出前100个大数,这意味着之后的数小于这100个数的概率是0.999,
也就是说1000个数中只有1个数需要插入MaxAry中。而随着读入数的个数增加,需
要插入MaxAry中的概率越小,效率也越来越高。相当于一个自学习的进化算法。

这个算法的理想前提是文件中的数据分布比较均匀,最差的情况是文件中的数据越往后越大。

(引用http://topic.csdn.net/u/20091013/10/d5d371dc-6dec-4034-bf31-432a47ffce96.html 254 楼geniuslinchao)

除了第一个回答无论是哪种方法,无疑,肯定是要将100g的文件读一遍的。而且是边写边处理

此外的回答还有多线程和分段排序再汇总比较。

关于多线程,我无法给出理由反驳。本身对多线程的知识就不牢靠所以不评论。

而分段排序再汇总我有疑问:如果分段后提取出来的最大的100个数字,比另一端里被舍弃的小数字还小呢?

基于上,我觉得还是要找好回答点。是100g?还是处理思路?

这个要看个人的思路。

以上回答,仅作提示。

关于“100g文件全是数组,取最大的100个数”解决方法汇总相关推荐

  1. MyEclipse打开JSP文件报Failed to create the part's controls解决方法汇总

    MyEclipse打开JSP文件报"Failed to create the part's controls"解决方法汇总 有时候,打开别人的开发环境中导过来的项目的JSP文件,会 ...

  2. linux如何判断数组是否为空,Linux fgetcsv取得的数组元素为空字符串的解决方法

    Linux fgetcsv取得的数组元素为空字符串的解决方法 但服务器上,很多使用Linux服务器,源程序使用UTF-8,这样很容易产生字符编码的问题. 如果仅仅将CSV文件转码为UTF-8,这样在W ...

  3. 关于AndroidStudio中Gradle文件引发的问题导致HelloWorld无法运行的解决方法

    关于AndroidStudio中Gradle文件引发的问题导致HelloWorld无法运行的解决方法 前言 AndroidStudio下载 安装教程(超级详细) 官网下载 点击启动安装 配置文件 He ...

  4. Unity网页插件Embedded Browser(ZFBrowser)打包文件无法加载本地网页或网站网址解决方法

    Unity网页插件Embedded Browser(ZFBrowser)打包文件无法加载本地网页或网站网址解决方法 问题:最近使用ZFBrowser开发VR嵌入网页发现出现一个问题,在编辑器模式下场景 ...

  5. 爬取数据出现乱码的解决方法

    爬虫爬取数据出现乱码的解决方法 1.网站源代码中英文全部乱码 可能的解决方法: 1)可能是编码格式不同造成的 在调用get方法后,返回的对象中有两个属性值,分别为: encoding.apparent ...

  6. VSCode中,新建js文件中编译器自带jQuery提示失效的解决方法

    VSCode中,新建js文件中编译器自带jQuery提示失效的解决方法 在VSCode中,新建js文件可能会发生VSCode自带的jQuery提示引起失效,如下图 在HTML文件中进行编辑,<s ...

  7. 微软必应词典在Adobe Acrobat Pro DC下取词崩溃问题的解决方法

    微软必应词典在Adobe Acrobat Pro DC下取词崩溃问题的解决方法 0x01 虽然必应词典会出现卡顿的现象,但是它的翻译想过还是很好的,更重要的是它没有广告,所以一直在用它,但是我发现一个 ...

  8. ajax上传文件 获取失败,Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法...

    本篇文章给大家带来的内容是关于Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 问题 A ...

  9. unknown error mysql_mysql执行sql文件报错Error: Unknown storage engine‘InnoDB’的解决方法...

    发现问题 最近在工作中遇到一个问题,在运行了一个innoDB类型的sql文件,报了Error: Unknown storage engine 'InnoDB'错误,网上查了很多方法,但是都没办法真正解 ...

最新文章

  1. 网元——就是网络中的元素,网络中的设备。总之,网元是网络管理中可以监视和管理的最小单位...
  2. Android local.properties 文件读取
  3. Xilinx软硬IP双管齐下解决音视频处理痛点
  4. MYSQL导入数据出现ERROR 1049 (42000): Unknown database 'n??;'
  5. 岭南师范C语言程序设计真题_2021南京师范大学现代教育技术考研经验分享
  6. selenium操作webdriver(一)
  7. linux mud 游戏,一笑天涯MUD游戏
  8. 分享5篇医疗数据挖掘论文(附pdf下载)
  9. 更换光猫的原理与方法
  10. lu分解法c语言编程,LU分解法(C语言).doc
  11. maven setting文件存放位置
  12. 【操作系统】CPU调度算法
  13. 物联网安全有哪些关键技术?
  14. 学习编程需要英语很好吗?
  15. 微软xcloud服务器,微软公布云游戏服务Project xCloud详情 2019年公测
  16. 如何监测微信群关键词并收集转发到指定的群
  17. 图像去噪——Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images
  18. 北邮智能车仿真培训(七)—— 使用c++编写程序
  19. Go语言从入门到规范-1.1、Go语言官网文档大纲及环境搭建
  20. 火炬电阻_火炬神经网络的对抗性攻击和防御

热门文章

  1. Jenkins 无法运行 putty.exe问题解决
  2. 第2章[2.7] Ext JS数据模型与数据封装
  3. [Ext JS 4] 实战之 ComboBox 和 DateField 的点击事件在IE下失效
  4. Javascript 时间操作汇总
  5. 自己动手写Docker系列 -- 3.3使用命令管道优化参数传递
  6. substr判断最后一个是不是逗号_考研最后一个月是不是很累?
  7. 修改tomcat服务器图标,如何更改tomcat图标
  8. mysql高级操作_MySQL数据库的高级操作
  9. 微金融php源码下载,ThinkPHP金融微盘微交易系统平台源码
  10. java时间格式化yyyy