3315. 構造最小位運算陣列 II

xiaoxinlong發表於2024-11-22

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
        

相關文章