难度中等
给你一个整数数组 nums
,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2] 输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99] 输出:99
使用一个长度为 32 的数组 cnt[] 记录下所有数值的每一位共出现了多少次 1,再对 cnt[] 数组的每一位进行 mod3 操作,重新拼凑出只出现一次的数值。
0 1 0 0 1 0 0 1 0 0 1 1 --- 0 4 1
class Solution { public: int singleNumber(vector<int>& nums) { int sum = 0; vector<int> cnt_map(32,0); for(auto n : nums) { for(int i = 0; i < 32;i++) { cnt_map[i] += (n&1); n = n>>1; } } int res = 0; for(int i = 0; i < 32;i++) { if (cnt_map[i]%3==1) { res += (1 << i); } } return res; } };
标签:map,cnt,数字,nums,int,32,II,137,出现 From: https://www.cnblogs.com/zle1992/p/16633102.html