题目地址
https://leetcode-cn.com/problems/single-number/
题目描述:只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
例 1:
输入: [2,2,1]
输出: 1
例 2:
输入: [4,1,2,1,2]
输出: 4
解答
这是一道非常经典的题。
方法一:排序后查找。
方法二:利用辅助空间标记。
当然,前两种方法都不是最好的。
方法三:位运算。
注意题目:每个数字出现两次或者一次,且出现一次的数字是唯一的。
异或运算的一个性质: a ^ a = 0.
因此,可以遍历数组,对所有元素异或,出现两次的数字均被消去,剩下的只是出现一次的数字。
代码:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res = 0;
for( auto it:nums)
res ^= it;
return res;
}
};