2917.找出数组中的K-or值
给你一个下标从
0
0
0开始的整数数组
n
u
m
s
nums
nums和一个整数 k 。
n
u
m
s
nums
nums中的
K
−
o
r
K-or
K−or是一个满足以下条件的非负整数:
只有在
n
u
m
s
nums
nums中,至少存在
k
k
k个元素的第
i
i
i位值为1,那么
K
−
o
r
K-or
K−or中的第
i
i
i位的值才是1。
返回
n
u
m
s
nums
nums的
K
−
o
r
K-or
K−or值。
注意:对于整数 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的方法题目中已经给提示了。