3171. 找到按位或最接近 K 的子数组

WrRan / 2024-09-25 / 原文

题目链接 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