1. 题目来源
链接:只出现一次的数字
2. 题目说明
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
3. 题目解析
方法一:位运算+异或+常规解法
简单异或位运算:
- 异或具备交换律
0 ^ n = n
n ^ n = 0
参见代码如下:
// 执行用时 :8 ms, 在所有 C++ 提交中击败了98.78%的用户
// 内存消耗 :13.3 MB, 在所有 C++ 提交中击败了5.10%的用户
class Solution {
public:
int singleNumber(vector<int>& nums) {
int val = 0;
for (int i = 0; i < nums.size(); ++i) val ^= nums[i];
return val;
}
};