每日一题——LeetCode2859.计算K置位下标对应元素的和

每日一题——LeetCode2859.计算K置位下标对应元素的和_第1张图片

方法一 枚举法:

        通过不断地将目标数值与 1 进行按位与操作,并根据结果判断最低位是否为 1,从而统计其中包含的 1 的个数。 如果1的个数等于K就加上该值。

var sumIndicesWithKSetBits = function(nums, k) {
    function countOnes(num) {
        let count = 0; // 初始化为零
        while (num !== 0) {
            if ((num & 1) === 1) { // 判断最低位是否为 1
                count++; // 若为 1,则计数加一
            }
            num >>= 1; // 右移一位,相当于除以2
        }
        return count;
    }
    let res = 0;
    for (let i = 0; i < nums.length; ++i) {
        if (countOnes(i) == k) {
            res += nums[i];
        }
    }
    return res;
};

消耗时间和内存情况:

每日一题——LeetCode2859.计算K置位下标对应元素的和_第2张图片

方法二:对计算置位个数进行优化

具体步骤思路参考官方题解
作者:力扣官方题解
链接:leetcode.2859官方题解

var sumIndicesWithKSetBits = function(nums, k) {
    const bitCount = (x) => {
        x = (x & 0b0101010101) + ((x & 0b1010101010) >> 1);
        x = ((x & 0b0011001100) >> 2) + (x & 0b1100110011);
        x = (x >> 8) + ((x >> 4) & 0b1111) + (x & 0b1111);
        return x;
    }

    let ans = 0;
    for (let i = 0; i < nums.length; ++i) {
        if (bitCount(i) == k) {
            ans += nums[i];
        }
    }
    return ans;
};

 消耗时间和内存情况:

每日一题——LeetCode2859.计算K置位下标对应元素的和_第3张图片

你可能感兴趣的:(每日一题,算法,javascript,leetcode)