1.题目介绍
2.题解
2.1 哈希表
思路
同本系列题I,不过多赘述
代码
class Solution {
public:
int singleNumber(std::vector<int>& nums) {
std::unordered_map<int,int> map;
for (int num:nums){
map[num]++;
}
for (auto pair:map){
if (pair.second == 1) return pair.first;
}
return 0;
}
};
结果展示
空间代价不是很理想
2.2 依次确定每一个二进制位
思路
这里的思路要类比上一题中的异或运算(排除所有出现偶次的数,使用了异或运算的性质)
这里重复出现三次,是一个三的倍数,如何利用好这个性质?
1.首先思考整体除三或者对其用3求余,发现了一个问题,用3求余的时候,确实能求出0,1,2,但是这里的数可能是n*3 + (0,1,2),无法确定这个n?
2.我们就在想能不能消除这个n,最好把这个n拆成n次一位一位的运算就好了,那么每一位我都能确定是0,1,2(或者更少的数),之后统一再变回来。
换句话说,如果这里的进制位数小于3,比如像二进制