137. 只出现一次的数字II
分析
考虑整数在计算机中以 32
位二进制形式表示,可以逐位统计数组中每个位上的 1
的出现次数
-
逐位遍历
- 对于每一位
i
(从0
到31
位),统计所有数字中第i
位上的1
的总数c
- 对于每一位
-
模
3
运算- 若某个位上的
1
的出现次数不是3
的倍数,则说明这个位在目标数中为1
- 将该位加入结果
res
- 若某个位上的
-
结果构建
- 将每一位结果通过位运算
res |= (c % 3) << i
累加到最终结果res
中
- 将每一位结果通过位运算
时间复杂度
时间复杂度 O(n)
空间复杂度
空间复杂度为 O(1)
C++代码
|
|