Single Number II
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?
Solution:
public class Solution {
public int singleNumber(int[] nums) {
int ones = 0, twos = 0, threes = 0;
for (int i = 0; i < nums.length; i++) {
// twos holds the num that appears twice
twos |= ones & nums[i];
// ones holds the num that appears once
ones ^= nums[i];
// threes holds the num that appears three times
threes = ones & twos;
// if num[i] appears three times
// doing this will clear ones and twos
ones &= ~threes;
twos &= ~threes;
}
return ones;
}
}