📅  最后修改于: 2023-12-03 14:57:58.105000             🧑  作者: Mango
给定正整数 N,找到最小的非负整数 x,满足 N 与 x, x+1, x+2, ... 每个数字按位与的结果都为 0。
例如,给定 N = 6,输出 3,因为 3、4、5、6 与 6 的按位与都为 0。
暴力求解不太可行,需要用到位运算的技巧。具体思路如下:
这样遍历一遍后,就能得到最小的满足题意的非负整数。
def findMinCount(N: int) -> int:
k = 0
n = N
while n > 0:
n >>= 1
k += 1
mask = (1 << k) - 1
ans = 0
for i in range(k - 1, -1, -1):
cur = ans | (1 << i)
if (cur & N) == 0 and (cur & mask) == cur:
ans = cur
return ans
遍历了 N 的二进制表示中每一位,时间复杂度为 O(log N);使用了常数级别的空间存储 mask、ans 等变量,空间复杂度为 O(1)。
本题是一道比较典型的位运算问题,需要着重掌握位运算的技巧和思想。在实践中,需要注意代码实现的细节和对题意的正确理解。