位运算的算法实例

问题:

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);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容