LC 2859.Sum of Values at Indices With K Set Bits
题目描述
这是 LeetCode
上的 2859.
计算 K 置位下标对应元素的和 - 力扣(LeetCode)
,难度为简单。
给你一个下标从 0 开始的整数数组 nums
和一个整数 k
。
请你用整数形式返回 nums
中的特定元素之
和 ,这些特定元素满足:其对应下标的二进制表示中恰存在
k
个置位。
整数的二进制表示中的 1 就是这个整数的 置位 。
例如,21
的二进制表示为 10101
,其中有
3
个置位。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 10^5
0 <= k <= 10
解答
方法一:模拟
最简单的就是根据题目的要求进行模拟。
1 |
|
时间复杂度:\(O(nm)\),其中
n
是nums
的长度,m
是每个下标的位数长度。空间复杂度:\(O(1)\)。
方法二:Population Count 算法
使用内置函数 Integer.bitCount()
算法进行加速运算。
对
Integer.bitCount()
内部实现感兴趣的可以参考下面的博客链接
1 |
|
时间复杂度:\(O(n \log \log C)\),其中
n
为nums
的长度,C
是数组nums
的最大长度。内置函数Integer.bitCount()
内部使用了分治算法,而C
有 \(O(\log C)\) 个二进制位,所以分治需要 \(O(\log \log C)\) 次。空间复杂度:\(O(1)\)。
每题一图
LC 2859.Sum of Values at Indices With K Set Bits
https://chen-huaneng.github.io/2024/01/25/2024-1-25-2024-01-25-lc-2859/