美文网首页LeetCode
136. 只出现一次的数字

136. 只出现一次的数字

作者: 闭门造折 | 来源:发表于2018-11-22 22:31 被阅读1次

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    说明:

    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    示例 1:

    输入: [2,2,1]
    输出: 1

    示例 2:

    输入: [4,1,2,1,2]
    输出: 4

    思路

    无比经典的一道题,但是又想不起来从哪里看到的经典题。
    引申经典题:
    n个数中,所有数字都是出现偶数次,只有某个数字出现奇数次
    用异或做判断,因为a^a=0,0^b=b,所以所有成对的数都会等于0,这样最终只剩下出现奇数次的数了
    随便举例

    0 — 0000 1001 0101
    1 — 0000 1100 0000
    2 — 0000 1100 0000
    首先数字0和数字1做异或操作,结果为
    x — 0000 0101 0101
    再和数字2做异或操作,结果为
    y — 0000 1001 0101,也就是独立的数字0 
    

    性能分析

    遍历一遍出结果,时间复杂度O(N),空间复杂度O(1)

    具体代码

    int singleNumber(vector<int>& nums) {
        int res = 0;  // 结果集
        for(int i = 0; i < nums.size(); i++){ // 遍历所有数
            res ^= nums[i]; // 做连续异或运算
        }
        return res;
    }
    

    相关文章

      网友评论

        本文标题:136. 只出现一次的数字

        本文链接:https://www.haomeiwen.com/subject/ilnrqqtx.html