只出现一次的数字---简单

题目:

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

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

示例:

  输入: [2,2,1]

  输出: 1

思路:

  比较浅显的思路就是先排好序为O(nlogn);还有通过一个桶来装数字出现的个数,最后线性扫描,然而这需要而外的依赖数字范围的空间,时间复杂度为O(n),空间复杂度为O(n)。有没有更简单的呢,想想看过的csapp关于位级运算。异或运算有如下特性:a^b^a=b,由此可以得出本题的解法

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int length=nums.size();
        int result=nums[0];
        for(int i=1;i<length;++i)
        {
            result^=nums[i];
        }
        return result;
    }
};

  看来主流解法就是这个呢。

猜你喜欢

转载自www.cnblogs.com/manch1n/p/10308191.html