📅  最后修改于: 2023-12-03 15:37:46.143000             🧑  作者: Mango
在给定的数组nums中,我们需要查询在索引范围[L, R]之间的所有元素的按位与(AND)操作的结果。 如果nums[L] AND nums[L+1] AND ... AND nums[R]的结果是val,我们需要找到val的值并返回。
我们可以使用位运算来解决这个问题,因为位运算符操作的是二进制数的每一位。
如果我们将范围[L, R]中的所有元素转换为二进制,并逐位进行按位AND运算,则可找到val。
class Solution(object):
def rangeBitwiseAnd(self, nums, left, right):
"""
:type nums: List[int]
:type left: int
:type right: int
:rtype: int
"""
# find the common bits between left and right
# e.g. 5 = 101, 7 = 111, the common bits are 100
while left < right:
right &= (right - 1)
return right & nums[left]
时间复杂度: O(log n),其中n是right-left的位数。在每个循环迭代中,right减少一半(即右移一位)。因此,我们需要最多 O(log n) 次迭代。
空间复杂度: O(1)。我们只需要常量级别的空间来存储变量。