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++代码
|
|