一、题目描述
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums = [3,4,3,3] 输入:nums = [9,1,7,9,7,9,7] 限制: 1 <= nums.length <= 10000 |
2.题目难度:中等
三、题解
方法一:使用HashMap计数
class Solution { public: int singleNumber(vector<int>& nums) { map<int,int> mp; int n = nums.size(); for(int num:nums){ mp[num]++; } for(auto it=mp.begin();it!=mp.end();it++){ if(it->second == 1) return it->first; } return 0; } };
方法二:
使用位运算
计算所有数每一位的和
然后对每一位mod 3,
最后剩余的数即为所求
class Solution { public: int singleNumber(vector<int>& nums) { int bit[32] = {0}; for(int num:nums){ for(int i=31;i>=0;i--){ bit[i] += (num & 1); num >>= 1; } } int res = 0; for(int i=0;i<32;i++){ res <<= 1; res += bit[i] % 3; } return res; } };