3315. 构造最小位运算数组 II
https://leetcode.cn/circle/discuss/CaOJ45/
给你一个长度为 n
的质数数组 nums
。你的任务是返回一个长度为 n
的数组 ans
,对于每个下标 i
,以下 条件 均成立:
ans[i] OR (ans[i] + 1) == nums[i]
除此以外,你需要 最小化 结果数组里每一个 ans[i]
。
如果没法找到符合 条件 的 ans[i]
,那么 ans[i] = -1
。
质数 指的是一个大于 1 的自然数,且它只有 1 和自己两个因数。
class Solution: def minBitwiseArray(self, nums: List[int]) -> List[int]: # 二进制把最右边的0的右边的1改成0 # 先取反 # 取到lowbit->最右边的0 该位置为1,其余全0 # 右移1位 -> 最右边的0的右边的1,该位置为1,其余全0 # 异或运算,把1改成0 for i,x in enumerate(nums): if x==2: nums[i]=-1 else: t = ~x nums[i] = nums[i]^((t&-t)>>1) return nums