位运算的算法实例

问题:

10亿个数,有两个数只出现了1次,其他的数有出现了两次,请找出这两个数

分析:

10亿个数,每个int数据占4个byte,10亿个数需要4G的内存,

代码示例:

下面的示例,使用了Integer,这将会占用更大的空间!!

        List 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 list1 = list.stream().filter(e -> (e & t1) != 0).collect(Collectors.toList());
        List 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);

你可能感兴趣的:(位运算的算法实例)