您的位置:首页 > 其它

Single Number II - leetcode

2013-10-03 15:38 399 查看


Single Number II

AC Rate: 11/62
My Submissions

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?

思路是:利用一个33位的数组保存n个数的每个二进制位1的个数,然后对其模3 , 这样最后剩下的就是出现一次的那个数了,注意第32位保存的正负数的个数,同样也要模3,最后决定结果的正负,同时要考虑溢出的情况。
代码如下

class Solution {
public:
int singleNumber(int A[], int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if ( n < 4)
return A[0];
short tmp[33] = {0};

for (int i = 0; i < n; ++i) {
unsigned int t = 0;
if (A[i] < 0) {
t = -A[i];
tmp[32] += 1;
tmp[32] %= 3;
}
else {
t = A[i];
}
int j = 0;
while (t) {
tmp[j] += t & 0x01;
// cout << (t & 0x01) << " ";
tmp[j] %= 3;
t >>= 1;
++j;
}
}
unsigned int key = 0;
for (int i = 0; i < 32; ++i) {
if (tmp[i])
key += (1 << i);
}
return tmp[32] == 0 ? key : -key;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: