Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 
Hide Tags
Hide Similar Problems
用数组统计每个bit位的出现次数,对3求余,
所有出现过三次的数字的bit位都会被去掉,
剩下的bit位就是只出现过依次的那个数字,重新组合即可。
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int sz = nums.size();
        int rst = 0;
        if(sz)
        {
            int bits[32]={0};
            for(int ii=0; ii<sz; ++ii)
            {
                int num = nums[ii];
                for(int bb=0; bb<32; ++bb)
                {
                    if(num&(1<<bb))
                        bits[bb]++;
                }
            }
            
            for(int bb=0; bb<32; ++bb)
            {
                if((bits[bb])%3)
                    rst |= (1<<bb);
            }
        }
        return rst;
    }
};
16 ms.
No comments:
Post a Comment