好久没有真二八经的练leecode 了,会浮躁,但还是要静下来学技术
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。
nums 中的 K-or 是一个满足以下条件的非负整数:
只有在 nums 中,至少存在 k 个元素的第 i 位值为 1 ,那么 K-or 中的第 i 位的值才是 1 。
返回 nums 的 K-or 值。
上面是这道题的意思
是不是很离谱,完全看不懂?
举一个例子
输入:nums = [7,12,9,8,9,15], k = 4
输出:9
解释:nums[0]、nums[2]、nums[4] 和 nums[5] 的第 0 位的值为 1 。
nums[0] 和 nums[5] 的第 1 位的值为 1 。
nums[0]、nums[1] 和 nums[5] 的第 2 位的值为 1 。
nums[1]、nums[2]、nums[3]、nums[4] 和 nums[5] 的第 3 位的值为 1 。
只有第 0 位和第 3 位满足数组中至少存在 k 个元素在对应位上的值为 1 。因此,答案为 2^0 + 2^3 = 9 。
// 0 1 2 3 4 5
// 4+2+1 8+4 8+1 8 8+1 8+4+2+1
// 111 1100 1001 1000 1001 1111
#就很离谱,刚开始我也在想 哪有这么多数位?
#后面才确定,是要将十进制的这些元素值转化成二进制
然后从最右往左分别是第0位,第1位,……
然后要求出,满足第i 位 为1 的元素至少要有k 个,肯定可能有 若干个数位满足条件
int solution(int vector<int>&nums, int k){
int ans = 0;
for(int i = 0; i < 32; ++i){
int tem = 0;
for(auto x : nums){
if(x >> i & 1){
tem++;
}
if(tmp >= k){
sum += pow(x, k);
}
}
}
return ans;
}
经常会讲出题人的语文是体育老师教的,现在看来说体育老师,都是高抬了
脑瓜子转不过来