leetcode位运算(2917. 找出数组中的 K-or 值)

前言

经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。后续开始专项练习。

描述

给你一个整数数组 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:
NumberBit 3Bit 2Bit 1Bit 0
70111
121100
91001
81000
91001
151111
Result = 91001
位 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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值