题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
思路:
统计二进制中每一位的和,如果该位的和对3取余不为0,则表示这个只出现一次的数字该位为1
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Solution { public: int singleNumber(vector<int>& nums) { unsigned int len = nums.size(); int *Bit_sum = new int[32]; for(int i = 0; i < 32; i++) Bit_sum[i] = 0; for(unsigned int i = 0; i < len; i++) { long long Bit_val = 1; for(int j = 31; j >= 0; j--) { int bit = nums[i] & Bit_val; // 当前位为1,则该位计数加1 if(bit != 0) Bit_sum[j]++; Bit_val = (Bit_val * 2); } } long int result = 0; for(int i = 0; i < 32; i++) { result = result * 2; result += Bit_sum[i] % 3; // 对3 取余的结果即为单个的数字该位的结果 } delete [] Bit_sum; return result; } }; |