wy的leetcode刷题记录_Day
声明
本文章的所有题目信息都来源于leetcode
如有侵权请联系我删掉!
时间:2024-1-25
前言
2859. 计算 K 置位下标对应元素的和
今天的每日一题是:2859. 计算 K 置位下标对应元素的和
题目介绍
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。
请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。
整数的二进制表示中的 1 就是这个整数的 置位 。
例如,21 的二进制表示为 10101 ,其中有 3 个置位。
示例 1:
输入:nums = [5,10,1,5,2], k = 1
输出:13
解释:下标的二进制表示是:
0 = 000(2)(二进制)
1 =001(2)
2 = 010(2)
3 = 011(2)
4 = 100(2)
下标 1、2 和 4 在其二进制表示中都存在 k = 1 个置位。
因此,答案为 nums[1] + nums[2] + nums[4] = 13 。
示例 2:
输入:nums = [4,3,2,1], k = 2
输出:1
解释:下标的二进制表示是:
0 = 00(2)
1 = 01(2)
2 = 10(2)
3 = 11(2)
只有下标 3 的二进制表示中存在 k = 2 个置位。
因此,答案为 nums[3] = 1 。
思路
枚举:本题解法简单但重在理解,什么是置位?整数的二进制表示中的 1的个数 就是这个整数的 置位,例如,21 的二进制表示为 10101 ,其中有 3 个置位。所以我们对于数组中的每个数来算其置位,找出符合题目的数并求和得到答案。
代码
class Solution {
public:
int func(int num)
{
int count=0;
while(num!=0)
{
if(num%2==1)
count++;
num=num>>1;
}
return count;
}
int sumIndicesWithKSetBits(vector<int>& nums, int k) {
int n=nums.size();
int sum=0;
for(int i=0;i<n;i++)
{
if(func(i)==k)
sum+=nums[i];
}
return sum;
}
};
收获
简单的模拟题