先决条件: STL库中的位集函数
给定数字N ,任务是找到该给定数字的置位和未置位位数的绝对差。
例子:
Input: N = 14
Output: 2
Explanation:
Binary representation of 14 is “1110”.
Here the number of set bits is 3 and the number of unset bits is 1.
Therefore, the absolute difference is 2.
Input: N = 56
Output: 0
Explaination:
Binary representation of 56 is “110100”.
Here the number of set bits is 3 and the number of unset bits is 3.
Therefore, the absolute difference 0.
方法:
- 计算给定数字的二进制表示形式中的总位数。
- 使用在STL库中定义位集合函数,有效设置位计数的数量。
- 然后,我们将从总位数中减去设置的位数,以获得未设置的位数。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Max size of bitset
const int sz = 64;
// Function to return the total bits
// in the binary representation
// of a number
int totalbits(int N)
{
return (int)(1 + log2(N));
}
// Function to calculate the
// absolute difference
int absoluteDifference(int N)
{
bitset arr(N);
int total_bits = totalbits(N);
// Calculate the number of
// set bits
int set_bits = arr.count();
// Calculate the number of
// unset bits
int unset_bits = total_bits
- set_bits;
int ans = abs(set_bits
- unset_bits);
// Return the absolute difference
return ans;
}
// Driver Code
int main()
{
// Given Number
int N = 14;
// Function Call
cout << absoluteDifference(N);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Max size of bitset
static final int sz = 64;
// Function to return the total bits
// in the binary representation
// of a number
static int totalbits(int N)
{
return (1 + (int)(Math.log(N) /
Math.log(2)));
}
// Function to calculate the
// absolute difference
static int absoluteDifference(int N)
{
int arr = N;
int total_bits = totalbits(N);
// Calculate the number of
// set bits
int set_bits = countSetBits(arr);
// Calculate the number of
// unset bits
int unset_bits = total_bits - set_bits;
int ans = Math.abs(set_bits - unset_bits);
// Return the absolute difference
return ans;
}
static int countSetBits(int n)
{
int count = 0;
while (n > 0)
{
n &= (n - 1);
count++;
}
return count;
}
// Driver code
public static void main(String[] args)
{
// Given Number
int N = 14;
// Function Call
System.out.println(absoluteDifference(N));
}
}
// This code is contributed by offbeat
Python3
# Python3 program for the above approach
import math
# Max size of bitset
sz = 64
# Function to return the total bits
# in the binary representation
# of a number
def totalbits(N) :
return (1 + (int)(math.log(N) / math.log(2)))
# Function to calculate the
# absolute difference
def absoluteDifference(N) :
arr = N
total_bits = totalbits(N)
# Calculate the number of
# set bits
set_bits = countSetBits(arr)
# Calculate the number of
# unset bits
unset_bits = total_bits - set_bits
ans = abs(set_bits - unset_bits)
# Return the absolute difference
return ans
def countSetBits(n) :
count = 0
while (n > 0) :
n = n & (n - 1)
count += 1
return count
# Given Number
N = 14
# Function Call
print(absoluteDifference(N))
# This code is contributed by divyesh072019
C#
// C# program for the above approach
using System;
class GFG{
// Function to return the total bits
// in the binary representation
// of a number
static int totalbits(int N)
{
return (1 + (int)(Math.Log(N) /
Math.Log(2)));
}
// Function to calculate the
// absolute difference
static int absoluteDifference(int N)
{
int arr = N;
int total_bits = totalbits(N);
// Calculate the number of
// set bits
int set_bits = countSetBits(arr);
// Calculate the number of
// unset bits
int unset_bits = total_bits - set_bits;
int ans = Math.Abs(set_bits - unset_bits);
// Return the absolute difference
return ans;
}
static int countSetBits(int n)
{
int count = 0;
while (n > 0)
{
n &= (n - 1);
count++;
}
return count;
}
// Driver code
static void Main() {
// Given Number
int N = 14;
// Function Call
Console.WriteLine(absoluteDifference(N));
}
}
// This code is contributed by divyeshrabadiya07
Javascript
输出:
2
时间复杂度: O(log N)