leetcode 137[转]

时间:2023-03-09 12:49:39
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 归零

原文地址