小编Seb*_*ruz的帖子

给定两个32位数字,N和M,以及两个位,i和j.编写一种方法,将N和j之间的所有位设置为N等于M.

您将获得两个32位数字,N和M,以及两个位,即i和j.编写一种方法来将N和j之间的所有位设置为N等于M(例如,M变为位于i的N的子串并从j开始).示例:输入:N = 10000000000,M = 10101,i = 2,j = 6输出:N = 10001010100

这个问题来自Cracking the Coding的采访.我能够使用以下O(j - i)算法解决它:

def set_bits(a, b, i, j):
    if not b: return a
    while i <= j:
        if b & 1 == 1:
            last_bit = (b & 1) << i
            a |= last_bit
        else:
            set_bit = ~(1 << i)
            a &= set_bit
        b >>= 1
        i += 1
    return a
Run Code Online (Sandbox Code Playgroud)

作者给出了这个O(1)算法作为解决方案:

def update_bits(n, m, i, j):
    max = ~0 # All 1s

    # 1s through position j, …
Run Code Online (Sandbox Code Playgroud)

python algorithm bit-manipulation bitwise-operators

4
推荐指数
1
解决办法
736
查看次数