Given 3*n
+ 1
numbers, every numbers occurs triple times except one, find it.
Example
Given [1,1,2,3,3,3,2,2,4,1]
return 4
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
int res = 0;
for(int i = 0; i < 32; i++) {
int count = 0;
for(int j = 0; j < A.length; j++) {
if((A[j] & (1 << i)) != 0) count ++;
}
if(count % 3 != 0)
res |= (1 << i);
}
return res;
}
}
public class Solution {
/**
* @param A : An integer array
* @return : An integer
*/
public int singleNumberII(int[] A) {
int one = 0, two = 0, three = 0;
for(int i = 0; i < A.length; i++) {
two |= one & A[i];//one出现1次并且A[i]出现1次 则代表可以进位到two
one ^= A[i];//one和A[i]做异或 保证one中只保存出现一次的值
three = one & two;
one &= ~three;//如果three中某一位为1,那么one和two中该为清零
two &= ~three;
}
return one;//返回one,其中已经除去了出现三次的数
}
}