面试题:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。求大神详细解答,谢谢

qq_39333336 2017-06-28 09:39:25
在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
有大神会解吗,万分感谢
...全文
1271 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wodexiaojidan 2017-07-06
  • 打赏
  • 举报
回复
#define N 250000000 void fun(unsigned char *map, int num) { int pos = num / 4, offset = 2 * (num % 4); switch((map[pos] >> offset) & 0x3){ case 0x0: map[pos] += 0x1 << offset; break; case 0x1: map[pos] += 0x1 << offset; break; case 0x2: default: break; } } int main(){ int src[N] = {0}; unsigned char map[2][INT_MAX / 4 + 1] = ""; int i, j; for(i = 0; i < N; ++i){ if(src[i] >= 0){ fun(map[0], src[i]); }else{ fun(map[1], -src[i]); } } printf("Those digits are only showed once in the array : "); for(j = 0; j < 2; ++j){ for(i = 0; i < INT_MAX + 1; ++i){ if((map[i / 4] >> (2 * (i % 4)) & 0x3) == 0x1){ if(j == 0){ printf("%d, ", i); }else{ printf("%d, ", -i); } } } } printf("\b\b \n"); return 0; }
wodexiaojidan 2017-07-06
  • 打赏
  • 举报
回复
#define N 250000000 void fun(unsigned char (*map)[INT_MAX / 4 + 1], int num) { int pos = num / 4, offset = 2 * (num % 4); switch(((*map)[pos] >> offset) & 0x3){ case 0x0: ((*map)[pos] >> offset) |= 0x1; break; case 0x1: ((*map)[pos] >> offset) ^= 0x2; break; case 0x2: default: break; } } int main(){ int src[N] = {0}; unsigned char map[2][INT_MAX / 4 + 1] = ""; int i, j; for(i = 0; i < N; ++i){ if(src[i] >= 0){ fun(map[0], src[i]); }else{ fun(map[1], -src[i]); } } printf("Those digits are only showed once in the array : "); for(j = 0; j < 2; ++j){ for(i = 0; i < INT_MAX + 1; ++i){ if(map[i / 4] >> (2 * (i % 4)) & 0x3 == 0x1){ if(j = 0){ printf("%d, ", i); }else{ printf("%d, ", -i); } } } } printf("\b\b \n"); return 0; }
2流子 2017-06-28
  • 打赏
  • 举报
回复
应该是先分类,把整数取0-255之后,载入当前分类然后遍历
ooolinux 2017-06-28
  • 打赏
  • 举报
回复
结构体,位域,结构体数组,注意变量不要在栈上分配。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧