[leetcode]137. Single Number II

 

137. Single Number II

Total Accepted: 87688 Total Submissions: 229128 Difficulty: Medium

 

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?

 

Subscribe to see which companies asked this question

 

 

int 数据共有32位,可以用32变量存储 这 N 个元素中各个二进制位上  1  出现的次数,最后 在进行 模三 操作,如果为1,那说明这一位是要找元素二进制表示中为 1 的那一位。代码如下:

时间:O(32*N),这是一个通用的解法,如果把出现3次改为 k 次,那么只需模k就行了

class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret=0;
int size=nums.size();
int bits=sizeof(int)*8;
vector<int> bitvec(bits,0);
for(int i=0;i<bits;i++){
for(int j=0;j<size;j++){
if((nums[j]>>i)&1==1)
bitvec[i]++;
}
int temp=(bitvec[i]%3)<<i; //temp is to save the corresponding bit whose times is greater than three
ret|=temp;

}
return ret;
}
};

 

posted @ 2016-06-28 15:08  0giant  阅读(339)  评论(0编辑  收藏  举报