一、题目
1、题目描述
给你一个下标从 0 开始的整数数组
nums
和一个整数k
。
nums
中的 K-or 是一个满足以下条件的非负整数:
- 只有在
nums
中,至少存在k
个元素的第i
位值为 1 ,那么 K-or 中的第i
位的值才是 1 。返回
nums
的 K-or 值。注意 :对于整数
x
,如果(2i AND x) == 2i
,则x
中的第i
位值为 1 ,其中AND
为按位与运算符。
2、接口描述
class Solution {
public:
int findKOr(vector<int>& nums, int k) {
}
};
3、原题链接
二、解题报告
1、思路分析
统计每一位的1的数目,按要求置位即可
2、复杂度
时间复杂度: O(nlogU)空间复杂度:O(nlogU)
3、代码详解
class Solution {
public:
int findKOr(vector<int>& nums, int k) {
int ret = 0;
for(int i = 0, cnt = 0; i < 31; i++) {
cnt = 0;
for(auto x : nums) cnt += ((x >> i) & 1);
ret |= ((cnt >= k) << i);
}
return ret;
}
};