题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例:
输入: [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; } };
看来主流解法就是这个呢。