给定一个由N个元素组成的数组arr []和一个整数K ,任务是计算置位位数为K的倍数的所有元素。
例子:
Input: arr[] = {1, 2, 3, 4, 5}, K = 2
Output: 2
Explanation:
Two numbers whose setbits count is multiple of 2 are {3, 5}.
Input: arr[] = {10, 20, 30, 40}, K = 4
Output: 1
Explanation:
There number whose setbits count is multiple of 4 is {30}.
方法:
- 遍历数组中的数字。
- 计算数组中每个数字的设置位。
- 检查setbits计数是否为K的倍数。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to find the count of numbers
int find_count(vector arr, int k)
{
int ans = 0;
for (int i : arr) {
// Get the set-bits count of each element
int x = __builtin_popcount(i);
// Check if the setbits count
// is divisible by K
if (x % k == 0)
// Increment the count
// of required numbers by 1
ans += 1;
}
return ans;
}
// Driver code
int main()
{
vector arr = { 12, 345, 2, 68, 7896 };
int K = 2;
cout << find_count(arr, K);
return 0;
}
Java
// Java implementation of above approach
class GFG{
// Function to find the count of numbers
static int find_count(int []arr, int k)
{
int ans = 0;
for (int i : arr) {
// Get the set-bits count of each element
int x = Integer.bitCount(i);
// Check if the setbits count
// is divisible by K
if (x % k == 0)
// Increment the count
// of required numbers by 1
ans += 1;
}
return ans;
}
// Driver code
public static void main(String[] args)
{
int []arr = { 12, 345, 2, 68, 7896 };
int K = 2;
System.out.print(find_count(arr, K));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 implementation of above approach
# Function to count total set bits
def bitsoncount(x):
return bin(x).count('1')
# Function to find the count of numbers
def find_count(arr, k) :
ans = 0
for i in arr:
# Get the set-bits count of each element
x = bitsoncount(i)
# Check if the setbits count
# is divisible by K
if (x % k == 0) :
# Increment the count
# of required numbers by 1
ans += 1
return ans
# Driver code
arr = [ 12, 345, 2, 68, 7896 ]
K = 2
print(find_count(arr, K))
# This code is contributed by Sanjit_Prasad
C#
// C# implementation of above approach
using System;
class GFG{
// Function to find the count of numbers
static int find_count(int []arr, int k)
{
int ans = 0;
foreach(int i in arr)
{
// Get the set-bits count of each element
int x = countSetBits(i);
// Check if the setbits count
// is divisible by K
if (x % k == 0)
// Increment the count
// of required numbers by 1
ans += 1;
}
return ans;
}
static int countSetBits(long x)
{
int setBits = 0;
while (x != 0)
{
x = x & (x - 1);
setBits++;
}
return setBits;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 12, 345, 2, 68, 7896 };
int K = 2;
Console.Write(find_count(arr, K));
}
}
// This code is contributed by sapnasingh4991
输出:
3
时间复杂度: O(N * M) ,其中N是数组的大小,M是数组中最大数字的位数。
辅助空间复杂度: O(1)