2917. 找出数组中的 K-or 值

class Solution:
    def findKOr(self, nums: List[int], k: int) -> int:
        # 位运算
        ans = 0
        # num < 2^31, i 是第 i 位
        for i in range(31):
            cnt = 0;
            # 所有数的二进制的第 i 位是否为 1
            for num in nums:
                if num >> i & 1:
                    cnt += 1
            # 满足条件,加
            if cnt >= k:
                ans |= 1 << i
        return ans

2918. 数组的最小相等和

class Solution:
    def minSum(self, nums1: List[int], nums2: List[int]) -> int:
        sum1 = sum(nums1)
        cnt1 = nums1.count(0)
        sum2 = sum(nums2)
        cnt2 = nums2.count(0)
        
        if cnt1==0 and cnt2==0 and sum1 != sum2 or cnt1==0 and sum2 + cnt2>sum1 or cnt2==0 and sum1 + cnt1>sum2:
            return -1
        
        return max(sum1+cnt1, sum2+cnt2)

2919. 使数组变美的最小增量运算数

class Solution:
    def minIncrementOperations(self, nums: List[int], k: int) -> int:
        #python3 注解,记忆化搜索,其他语言可用 visit [] 数组记录
        @cache
        def dp(i:int, j:int) -> int:
            if i < 0:
                return 0
            # 不选
            res = dp(i-1, 0) +  + max(k-nums[i], 0)
            # 选
            if j < 2:
                res = min(res, dp(i-1, j+1))
            return res
        return dp(len(nums)-1, 0)