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

本文介绍了一种算法,用于计算给定整数数组nums的K-or值,即在nums中有k个元素的第i位为1时,K-or值的第i位才会为1。通过找到最大数的二进制位数并统计每个位上为1的次数,最终得出K-or值。
摘要由CSDN通过智能技术生成

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

给你一个下标从 0 0 0开始的整数数组 n u m s nums nums和一个整数 k 。
n u m s nums nums中的 K − o r K-or Kor是一个满足以下条件的非负整数:
只有在 n u m s nums nums中,至少存在 k k k个元素的第 i i i位值为1,那么 K − o r K-or Kor中的第 i i i位的值才是1。
返回 n u m s nums nums K − o r K-or Kor值。

注意:对于整数 x x x,如果 ( 2 i   A N D    x ) = = 2 i (2^i \space AND \space \space x) == 2^i (2i AND  x)==2i,则 x x x中的第 i i i位值为 1 ,其中 A N D AND AND为按位与运算符。

题解

class Solution:
    def findKOr(self, nums: List[int], k: int) -> int:
        ma = max(nums)
        ml = 0
        for i in range(32):
            if ma < 2 ** i:
                ml = i
                break
        k_or = [0] * (ml + 1)
        for i in range(ml + 1):
            for j in nums:
                if (2 ** i) & j == 2 ** i:
                    k_or[i] += 1
        s = 0
        for i in range(ml + 1):
            s += 2 ** i if k_or[i] >= k else 0
        return s

思路

首先确定最大的数,确定结果的范围,这个范围指的是 n u m s nums nums中最大数的二进制位数。接着遍历这个范围(二进制数的位数),内层循环是遍历数组 n u m s nums nums,统计二进制数第 i i i位数为1的个数。最后根据统计结果计算答案。如何知道某个数的二进制第 i i i位是否为1的方法题目中已经给提示了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值