3171.找到按位或最接近K的子数组
链接:3171.找到按位或最接近K的子数组
难度:Hard
标签:位运算、线段树、数组、二分查找
简介:返回 优质数对 的总数。
题解 1 - python
- 编辑时间:2024-10-10
- 执行用时:2499ms
- 内存消耗:30.93MB
- 编程语言:python
- 解法介绍:二进制存储,枚举右侧
class Solution:
def minimumDifference(self, nums: List[int], k: int) -> int:
bits = [0] * 32
cur = l = 0
n = len(nums)
res = inf
for r in range(n):
for b in range(32):
if nums[r] & (1 << b):
bits[b] += 1
if bits[b] == 1:
cur |= 1 << b
res = min(res, abs(k - cur))
while l < r and cur > k:
for b in range(32):
if nums[l] & (1 << b):
bits[b] -= 1
if bits[b] == 0:
cur &= ~(1 << b)
res = min(res, abs(k - cur))
l += 1
return res