问题:
10亿个数,有两个数只出现了1次,其他的数有出现了两次,请找出这两个数
分析:
10亿个数,每个int数据占4个byte,10亿个数需要4G的内存,
代码示例:
下面的示例,使用了Integer,这将会占用更大的空间!!
List<Integer> list = Arrays.asList(1,1,3,3,4,4,7,9);
int result = list.stream().reduce(0, (o1, o2) -> o1 ^ o2);
System.out.println(result);
int t = 1;
while (result != 1) {
t = t * 2;
result = result / 2;
}
final int t1 = t;
List<Integer> list1 = list.stream().filter(e -> (e & t1) != 0).collect(Collectors.toList());
List<Integer> list2 = list.stream().filter(e -> (e & t1) == 0).collect(Collectors.toList());
int result1 = list1.stream().reduce(0, (o1, o2) -> o1 ^ o2);
int result2 = list2.stream().reduce(0, (o1, o2) -> o1 ^ o2);