3171. 找到按位或最接近 K 的子数组
| 题目链接 | 3171. 找到按位或最接近 K 的子数组 |
|---|---|
| 思路 | 双循环+位运算性质剪枝 |
| 题解链接 | 利用 OR 的性质(Python/Java/C++/Go) |
| 关键点 | 识别到OR运算的性质;从而保证双层循环时复杂度可控 |
| 时间复杂度 | \(O(n\log maxv)\) |
| 空间复杂度 | \(O(1)\) |
代码实现:
class Solution:
def minimumDifference(self, nums: List[int], k: int) -> int:
answer = inf
for index, num in enumerate(nums):
answer = min(answer, abs(num - k))
j = index - 1
while j >= 0 and nums[j] | num != nums[j]:
nums[j] |= num
answer = min(answer, abs(nums[j] - k))
j -= 1
return answer