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?
//Single Number类似使用位运算,不过这里借助一个数组,将每位进行处理!
//通过一个32数组---为什么是32位呢?因整形是32位
//可以这样来定const int size= sizeof(A[0]) * 8;//模拟三进制位的运算,最后记得把所有单独的位在合并起来 。时间复杂度o(n),空间O(1)
int singleNumber(int A[], int n) {
const int size = sizeof(A[0])*8;//可写32
char element[size]; //char 数组模拟 整形3进制用
int result = 0;//第一次未初始化报错!
memset(element,0,sizeof(char)*size);
for(int i=0;i<n;i++)
for(int j=0;j<size;j++) // 模拟3进制,处理相应的位
{
element[j]+=(A[i]>>j)&0x01; //处理第i位,通过移位得到
element[j] %= 3;//每一位某3运算,从而实现3进制
}
for(int k=0;k<size;k++)//合并 --- 最后将各个位合起来
result|=(element[k]<<k);
return result;
}