求一道算法题,该如何解决

求一道算法题
假设 我有10亿个数字, 我如何才能快速的找出这10亿个数中没有的数呢? 
要求考虑内存消耗小, 效率高的算法。



------解决方案--------------------
10亿个4字节够存了的话不涉及大数计算
按位建立树吧 每个节点 01代表有没此开头的数
比如16进制
根的子节点0-F,代表 0-0FFFFFFF,10000000-1FFFFFFF,F0000000-FFFFFFFF
跟的A子节点为A0 - AF A0-A0FFFFFF,A1000000-A1FFFFFF,AF000000-AFFFFFFF
以此类推

存储时间变为O(8n)
空间小于等于 ((16^8-8)/7 + n)*(地址程度+alignment)
查找速度变为O(8)
------解决方案--------------------
要是你对位运算不了解,那就用bitset,否则用unsigned int arr[N]; N=10亿/32;

然后你懂的,比如要标记/取消 数字m,就是arr[m/32]^=(1<<(32-m%32-1));