Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.
Analysis:
given a integer, there could be 32 positions in a Integer. If there are 3*number 1 bits on one position. We need to count the number of 1 bit appears on one position and then do the mod(%3), if it is 0 then this bit is 0, if it is 1, then this bit should be 1 for the result.
There is another method to count the number of 1 bit appears, I can not understand it.
http://www.programcreek.com/2014/03/leetcode-single-number-ii-java/
public int singleNumber(int[] A) {
int ones = 0, twos = 0, threes = 0;
for (int i = 0; i < A.length; i++) {
twos |= ones & A[i];
ones ^= A[i];
threes = ones & twos;
ones &= ~threes;
twos &= ~threes;
}
return ones;
}
public class Solution {
public int singleNumber(int[] nums) {
if(nums.length == 0 || A == null)
return 0;
int[] count = new int[32];
for(int i = 0; i < nums.length; i++){
for(int j = 0; j < 32; j++){
if(nums[i] >> j & 1 == 1)
count[j] ++;
}
}
int result = 0;
for(int i = 0; i < 32; i++){
result += (count[i]%3 << i);
}
return result;
}
}