C++ 只出现一次的数字(二)
//给定一个整数数组,数组中有一个数出现了一次,其他数出现了三次,请找出只出现了一次的数。 //数据范围:数组大小满足1-10^5,数组中每个元素大小满足-2^31 - 2^31-1 //统计各个数的出现频率的方法 int singleNumber1(vector<int>& nums) { size_t length = nums.size(); unordered_map<int, int> buff(length); for (size_t i = 0; i < length; i++) { ++buff[nums[i]]; } for (auto p : buff) { if (p.second == 1) return p.first; } return 0; } //位统计操作方法 int singleNumber(vector<int>& nums) { vector<int> bitPos(32, 0);//统计每个bit位出现了多少次 int result = 0; for (size_t u = 0; u < nums.size(); ++u) { int num = nums[u]; //统计每个数不为0的bit位 for (int i = 0; i < 32; ++i) { if ((num & (1 << i)) != 0) { ++bitPos[i]; } } } for (int i = 0; i < 32; i++) { //如果该位出现的次数不为3的倍数,那么频数为1的值也有这个bit位 if (bitPos[i] % 3 != 0) { result += (1 << i); } } return result; }