Single Number
原题链接Single Number
一个整数序列,每个数字都出现两次只有一次数字出现了一次,找到只出现一次的那个数字
位运算的异或算法有如下几个性质
- 值相同的两个数字异或结果为0,即a ^ a = 0
- 交换律,即a ^ b = b ^ a
- 综上两条性质,得到a ^ b ^ b = b ^ a ^ b = b ^ b ^ a = a
所以只需要遍历一遍序列,并做异或运算,所有出现两次的数字在异或的过程中都变为0,只留下唯一的一个出现一次的数字
代码如下
class Solution {
public:
int singleNumber(vector<int>& nums) {
return std::accumulate(nums.begin(), nums.end(), 0, bit_xor<int>());
}
};
Single Number II
原题链接Single Number II
一个整数序列,每个数字都出现三次只有一个数字出现了一次(也可以出现一次或