题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
思路
这道题目可以用到异或运算符,用这个就可以秒解这道题,不多说,上代码。
代码
class Solutiona {
public:
int singleNumber(vector<int>& nums) {
int j = 0;
for (int i = 0; i < nums.size(); i++)
{
//异或运算符两边相同的时候为0,不同的时候为1
j = j ^ nums.at(i);
}
return j;
}
};
/* 0 ^ 0 = 0, 0 ^ 1 = 1 可理解为:0异或任何数,其结果 = 任何数
1 ^ 0 = 1, 1 ^ 1 = 0 可理解为: 1异或任何数,其结果 = 任何数取反*/
注意
这道题目只要会异或运算符就能很快找到出现次数为一的数字,1和0的异或可以看成二进制之间的运算,1^1等于二进制的1+1,所以等于0,正是因为这个原理,所以相同数字异或的时候值为0。
版权声明:本文为weixin_44784684原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。