1318. 或运算的最小翻转次数
分析
-
位运算分析
- 对每一位(从低位到高位)分别判断
a
、b
、c
的二进制表示: x = a >> i & 1
:表示a
的第i
位y = b >> i & 1
:表示b
的第i
位z = c >> i & 1
:表示c
的第i
位
- 对每一位(从低位到高位)分别判断
-
根据
z
的值,分情况讨论:-
如果
z = 0
:- 需要
x = 0
且y = 0
,因此:需要翻转的次数 = x + y
- 需要
-
如果
z = 1
:- 至少需要
x = 1
或y = 1
。若x = 0
且y = 0
,则需要翻转1
- 至少需要
-
-
循环计算
逐位处理 a
、b
和 c
,根据上述规则累加所需的翻转次数
- 终止条件
由于题目限制 a
, b
, c
小于 1e9
,其最大值在 2^30
以内,因此只需处理前 30
位即可
时间复杂度
O(1)
空间复杂度
O(1)
C++代码
|
|