Single Number
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
分析:
异或,不仅能处理两次的情况,只要出现偶数次,都可以清零
- If we take XOR of zero and some bit, it will return that bit
- a ⊕ 0 = a
- If we take XOR of two same bits, it will return 0
- a ⊕ a = 0
- a ⊕ b ⊕ a = (a ⊕ a) ⊕ b = 0 ⊕ b = b
class Solution {
public:
int singleNumber(vector<int>& nums) {
int x = 0;
for (int i : nums) {
x ^= i;
}
return x;
}
};
时间复杂度o(n),空间复杂度o(1)