题目是:随机产生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就表示输入值前面随机产生的数据中。我的难处在位图怎创建,怎初始化,和象素的比特位数有关吗?如果大师这方法能实现,请指教我的疑点。 |