Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Solution:
We keep tree variables: one with the bits that appear $3k+1$ times, two with those that appear $3k+2$, and three with $3k$, such that $k$ is an integer.public class Solution { public int singleNumber(int[] A) { int one = 0; int two = 0; int three = ~0; for(int i=0; i<A.length; i++) { int nextOne = (~A[i] & one) | (A[i] & three); int nextTwo = (~A[i] & two) | (A[i] & one); int nextThree = (~A[i] & three) | (A[i] & two); one = nextOne; two = nextTwo; three = nextThree; } return one; } }
No comments :
Post a Comment