算法题1——&和^相关

一、一个数组中包含一种数出现了奇数次,其他的数都出现了偶数次,找出这个出现了奇数次的数。

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 3, 1};
        int eor = 0;
        for (int i : arr) {
            eor ^= i;
        }
        System.out.println(eor);
    }

二、一个数组中包含两种数出现了奇数次,其他的数都出现了偶数次,找出这两个出现了奇数次的数。

复制代码
    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 3, 1, 4};//为了取出a和b,这个数组里面的4和5
        int eor = 0, rightOne;
        for (int i : arr) {
            eor ^= i;
        }
        //eor = a ^ b
        //eor != 0
        //eor必然有一个位置上是1
        rightOne = eor & (~eor + 1);//提取出最右边的1,就是a和b从右开始第一次分别是0和1的时候
        int onlyOne = 0;
        for (int i : arr) {
            if ((i & rightOne) == 1) {//
                onlyOne ^= i;
            }
        }
        System.out.println(onlyOne + " " + (eor ^ onlyOne));
    }
复制代码

 

posted @   ZZKZS  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2021-04-20 设置火狐浏览器不缓存js与html,便于开发调试(火狐浏览器默认缓存js与html,导致开发调试带来很多不便)
2020-04-20 《企业应用架构模式》阅读笔记二
2019-04-20 第八周学习进度
/*鼠标跟随效果*/
点击右上角即可分享
微信分享提示