论坛首页 入门技术论坛

水木上看到的一个面试题,讨论很激烈

浏览 56985 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-05-19  
题目是这样的:
一个文件中有40亿个整数(32位) 10MB内存 如何在读取一遍文件后给出不在这40亿个数中的任意一个数(32位)

看到很多人回帖讨论的很激烈,我在想,有那么复杂么?是不是给得信息太多了,限制了思路?
扫描一遍,还10M内存?
扫描一遍就够了,内存还用得着那么大么?
   发表时间:2011-05-19  
扫描一遍后的结果呢...不得放在内存中啊
0 请登录后投票
   发表时间:2011-05-19  
supertaxi 写道
扫描一遍后的结果呢...不得放在内存中啊

我觉得给指定内存是用来迷惑人的,几个字节的内存足矣
0 请登录后投票
   发表时间:2011-05-19  
nianien 写道
supertaxi 写道
扫描一遍后的结果呢...不得放在内存中啊

我觉得给指定内存是用来迷惑人的,几个字节的内存足矣

那你给说下你的想法吧,看看你用多少个字节,谢谢
0 请登录后投票
   发表时间:2011-05-19  
这题目用关联数组一次就行了啊,不过还得扫描一个大数组,找到一个没有出现的数
0 请登录后投票
   发表时间:2011-05-19  
jason61719 写道
这题目用关联数组一次就行了啊,不过还得扫描一个大数组,找到一个没有出现的数

那不就是想当于扫描两遍么?题目的意思扫描完文件直接得出结果来
0 请登录后投票
   发表时间:2011-05-19  
一个文件中有40亿个整数(32位) 10MB内存 如何在读取一遍文件后给出不在这40亿个数中的任意一个数(32位)

啥意思,没看明白
0 请登录后投票
   发表时间:2011-05-19  
求和,取差 => 结果.
0 请登录后投票
   发表时间:2011-05-19  
去看《编程珠玑》去
就是书里的例子,照搬不动
思路是2分
0 请登录后投票
   发表时间:2011-05-19   最后修改:2011-05-19
有这么个想法咯:
用一个二维数组,我们简单的说个例子
简单起见,我们默认文件里的值都为整数
一个10*10的二维数组
如果我们拿到O,100,200 300 400 500 600,则将a[0][0]=127
则我们将得到一个1111111B也就是127. 我们可以以2,6....表示0未出现
同时a[0][1]可以为111111...表示 1 101 201 301 401 501 ...
按照这个思路,问题也许就解决了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics