137. Single Number II
问题描述:
Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.
解题思路:
int 数据共有32位,可以用32变量存储 这 N 个元素中各个二进制位上 1 出现的次数,最后 在进行 模三 操作,如果为1,那说明这一位是要找元素二进制表示中为 1 的那一位。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int bits[32] = {0};
int res = 0;
for(int i = 0; i < 32; ++i){
for(int j = 0; j < nums.size(); ++j){
bits[i] += (nums[j] >> i) & 1;
}
res += ((bits[i] % 3) << i);
}
return res;
}
};
结果如下:
260. Single Number III
题目描述:
Given an array of numbers nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
解题思路:
代码如下:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int AxorB = 0;
vector<int>res(2);
for(int i = 0; i < nums.size(); ++i){
AxorB = AxorB ^ nums[i];
}
int rightMost1Bit = AxorB & (-AxorB);
for(int i = 0; i < nums.size(); ++i){
if ((rightMost1Bit & nums[i]) > 0)
res[0] = res[0] ^ nums[i];
else
res[1] = res[1] ^ nums[i];
}
return res;
}
};
结果如下: