问题描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
解题报告
参考 【每日算法Day 72】谷歌面试题:又双叒叕是位运算,最详细的自动机推导过程。解释非常清楚。
实现代码
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0,counter=0;
for (int i = 0; i < 32; ++i) {
counter = 0;
for (auto x : nums) {
counter += (x>>i)&1;
}
ans |= (counter%3)<<i;
}
return ans;
}
};
参考资料
[1] Leetcode 137.只出现一次的数字 II
[2] 【每日算法Day 72】谷歌面试题:又双叒叕是位运算,最详细的自动机推导过程