前言
经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。后续开始专项练习。
描述
给你一个整数数组
nums
和一个整数k
。让我们通过扩展标准的按位或来介绍 K-or 操作。在 K-or 操作中,如果在nums
中,至少存在k
个元素的第i
位值为 1 ,那么 K-or 中的第i
位的值是 1 。返回
nums
的 K-or 值。示例 1:
输入:nums = [7,12,9,8,9,15], k = 4 输出:9 解释: 用二进制表示 numbers:
Number Bit 3 Bit 2 Bit 1 Bit 0 7 0 1 1 1 12 1 1 0 0 9 1 0 0 1 8 1 0 0 0 9 1 0 0 1 15 1 1 1 1 Result = 9 1 0 0 1 位 0 在 7, 9, 9, 15 中为 1。位 3 在 12, 9, 8, 9, 15 中为 1。 只有位 0 和 3 满足。结果是 (1001)2 = 9。
实现原理与步骤
1.本题重点是第一循环,int由于是32位的数字,比较0至31位bit位即可。
2.nums[j]&(1<<i)!=0只要第j个nums的对应比特位上存在值则与对应位置的1后不为0
代码实现
class Solution {
public int findKOr(int[] nums, int k) {
int res=0;
for(int i=0;i<32;i++){
int temp=0;
for(int j=0;j<nums.length;j++){
if((nums[j]&(1<<i))!=0){
temp++;
if(temp>=k){
res|=1<<i;
}
}
}
}
return res;
}
}