leetcode 137[转]
没思路。网上找到的。
1.
将每一个int看成32位数,统计每一位出现的次数对3取余,所以需要开辟一个32大小的数组来统计每一位出现的次数
2.
对第一种思路进行简化,模拟3进制:
three two one
0 0 1 表示出现了1个1
0 1 0 表示出现了2个1
0 1 1 表示出现了3个1.此时我们需要将其转化成三进制的:
1 0 0 并将后2位归零。
故而
two = (one & A[i] ) | two 已有1个1,又来1个1,则该位取1;或者本来就有2个1
one = one ^ A[i] 当前没有1,来了个1;或者本来就有1,来了个0
three = two & one;
two = two & (~three)
one = one & (~three) 如果已有3个1,则three为1,且 one 和 two 归零