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
        

 

posted @ 2024-11-22 00:00  xiaoxinlong  阅读(3)  评论(0编辑  收藏  举报