0%

面试题-BitSet

题目: 有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Alibaba {
public static void main(String[] args) {

// 生成随机数
Random random=new Random();
List<Integer> list=new ArrayList<>();
for(int i=0;i<10000000;i++) {
int randomResult=random.nextInt(100000000);
list.add(randomResult);
}

// 打印生成随机数
System.out.println("产生的随机数有");
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}

// 创建一亿位的BitSet
BitSet bitSet=new BitSet(100000000);
for(int i=0;i<10000000;i++) {
// 把随机数放进去
bitSet.set(list.get(i));
}

// 打印结果:0~1亿不在上述随机数中的结果
System.out.println("0~1亿不在上述随机数中有" + bitSet.size());
for (int i = 0; i < 100000000; i++) {
if(!bitSet.get(i)) {
System.out.println(i);
}
}
}
}

说明 BitSet

  1. 去重
  2. 正序
  3. 长度为64倍数(默认64)
  4. get()方法是返回boolean值, 存在值为true, 不存在为false(注意:这个get的参数是值, 并不是索引下标)