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?
int 数据共有32位,可以用32变量存储 这 N 个元素中各个二进制位上 1 出现的次数。若某数出现3次,则每一位1出现的次数是3的整数倍。最后在进行 模三 操作,如果为1,那说明这一位是要找元素二进制表示中为 1 的那一位。其实,可以扩展到某个数出现一次,其余的数出现k次,这样mod k即可。
public class Solution {
public int singleNumber(int[] A) {
int result=0;
int [] flag=new int[32];
for(int i=0;i<A.length;i++){
for(int j=0;j<32;j++) flag[j]+=((A[i]>>j)%2);
}
for(int i=0;i<32;i++){
if (flag[i]%3!=0) result+=1<<i;
}
return result;
}
}