题目:
现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素
注意:
你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?
解法:将int型数字看成一个位容器
public int singleNumber(int[] A) {
int ones=0;
int twos=0;
for(int i=0;i<A.length;i++){
int t=A[i];
int threes=t&twos;
t=t^threes;//抹去出现三次的
twos=twos^threes;//抹去出现三次的
twos=twos|(ones&t);//更新twos
ones=ones^t;//更新ones
}
return ones;
}