Single Number II

来源:互联网 发布:java api中文文档 编辑:程序博客网 时间:2024/06/03 20:42

Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

解题技巧:

这道题类似于 Single Number,不同的是,除了一个数字出现过一次,其他数字都出现了三次,因此,我们可以统计所有数字在某一位上1的个数,如果是3的整数倍,则说明只出现1次的那个数在该位为0,否则,为1。

代码:

#include <iostream>#include <vector>using namespace std;int singleNumber(vector<int>& nums){    int length = nums.size();    int result = 0;    for(int i = 0; i < 32; i ++)    {        int count = 0;        int mask = 1 << i;        for(int j = 0; j < length; j ++)        {            if(nums[j] & mask)  count ++;        }        if(count % 3)  result |= mask;    }    return result;}int main(){    vector<int> nums;    int num;    while(cin>>num)    {        nums.push_back(num);    }    cout<<singleNumber(nums);}