十亿个乱序不重复的数字,输出没有出现过的数字,例如 {0,1,2,3,5,6,7,8,9,10} 中4没有。
这是一个阿里算法题,当时脑子没有想到bitmap,实际中没用到的真的是想到几率小,给自己敲响警钟,这道题不难。bitmap处理几乎不占很多内存,又很快。o(n)就够。
众所周知1byte=8位,所以1byte上的每一位都可以记录一个值的状态,0可以表示不存在,1表示存在。用与和或操作来实现插入和遍历,非常快捷简单。
实例代码:
/**
* @Author: cuiyifan
* @Date: 2019/11/11 8:01 PM
* @Description:十亿个乱序不重复的数字,输出没有出现过的数字
*/
public class BitClass {
public static void main(String[] args) {
int[] data = {0,1,2,3,5,6,7,8,9,10};
byte[] bitmap = new byte[data.length/8 + 1];
putData(data,bitmap);
show(bitmap);
notFind(bitmap);
}
public static void show(byte[] bitmap){
for(byte b:bitmap){
for(int i=0;i<8;i++) {
System.out.print(b & 1);
System.out.print(" ");
b