只出现一次的数字 II
- 方法1: 采用hash-map计数
- 方法2: 采用bit位累加,取余
C++实现
class Solution {
public:
int singleNumber(vector& nums) {
// 匿名函数
auto getNumberBits = [](int num) -> vector {
// low -> high
vector bits(32, 0);
for (int i=0; i<32; i bitsi='(num'>> i)&0x1;
}
return bits;
};
vector bits_sum(32, 0);
for (const auto & num : nums) {
auto bits = getNumberBits(num);
for (int i = 0; i < 32; i++) {
bits_sum[i] += bits[i];
}
}
// get result from 32 bits
int res = 0;
for (int i = 0; i < 32; i++) {
res += (bits_sum[i]%3)<<i;
}
return res;
}
};
golang实现
func singleNumber(nums []int) int {
// not use hash-map, but use vector
getNumberBits := func(num int) [32]int {
// low -> high
bits := [32]int{}
for i := 0; i < 32 i bitsi='(num'>>i)&0x1;
}
return bits
}
bitsSum := [32]int32{}
for _, v := range nums {
bits := getNumberBits(v)
for i := 0; i < 32; i++ {
bitsSum[i] += int32(bits[i])
}
}
res := int32(0)
for i := 0; i < 32; i++ {
res += (bitsSum[i]%3)<<i;
}
return int(res)
}