打印

C语言面试题

[复制链接]
1021|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gxgclg|  楼主 | 2012-5-25 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目是:随机产生100000000个取值范围为[0,2的32次方减1]的数据,然后让用户输入一个数据,判断用户输入的数据是不是包含在前面随机产生的数据中。要求:当用户输入完成后,必须在1毫秒(千分之一秒)之内完成判断。

我的思路是这样的:new出一块大小为:0xfffffffful/32的空间pData,初始化都为0;然后随机生成的数 uNum/32得到下标,然后把这随机数所以所在数组的值pData[uNum/32] |= (1<<uNum%32),即用值的所在比特位置1来保存(有生成);所有随机数生成后,输入一个数据 nInVale,查:pData[nInVale/32]值对应所在的位:nInVale%32是否为1来判断;这样的思路如果能成也是太耗内存,要开2的32次方/32 大的地址,伤不起啊,大神请帮开下别的思路。

我看到有一个这样的思想比较好,可我做起来还有难度:创建一个足够大的位图,初始的时候将内容都置为0,然后编程随机生成数据,通过计算得到这个数据在位图中放置的位置,然后将此位置的值设置成1,循环完成数据填入。用户输入一个数据,计算在位图中的位置,然后取位图的值,值为1就表示输入值前面随机产生的数据中。我的难处在位图怎创建,怎初始化,和象素的比特位数有关吗?如果大师这方法能实现,请指教我的疑点。

相关帖子

沙发
dfsa| | 2012-5-25 23:14 | 只看该作者
提供几种比较靠谱的算法:
1.用哈希表来保存产生的随机数,这样在查找是就可以快很多。
2.在产生随机数时就对随机数进行排序,然后在用户输入要查找的值时对有序的数组进行二分查找,这样也可以快很多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1653

帖子

1

粉丝