力扣136. 只出现一次的数字

题目来自


代码及思路

按位或 | ,有一为一,其他为零。(二进制位中对应运算的两个二进制位,只要有一个为1,其结果就是1)
0011      10进制3
0010      10进制2
0011      10进制3(结果)

按位与 & ,均一为一,其他为零。(对应的二进制位均为1,结果才是1)
0011      10进制3
0010      10进制2
0010      10进制2(结果)

按位异或 ^,不同为一,其他为零。(比如 (1^0) (0^1))
0011      10进制3
0010      10进制2
0001      10进制1(结果)

    /**
     * 这里有一个“定理” :
     *           两个相同的数字进行异或,结果为零。
     *           零和任何数字进行异或,结果为那个任何数字。
     *
     * 拓展推理:
     *           二进制位进行的运算,与,异或,或,与顺序无关。
     *           题目中,只有一个数字只出现一次,其他数字都出现两次。
     *           由于已经知道以二进制位进行的运算和顺序无关。
     *           那么最终必然为: 1 ^ 1 ^ 2 ^ 2 ^ 3 ^ 3 ^ 4 = 4。(举个栗子)
     *
     */
    public int singleNumber(int[] nums) {
        int x = nums[0];
        for( int i = 0 ; i < nums.length ; i ++ ){
            x ^= nums[i];
        }
        return x;
    }

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

友情链接更多精彩内容