Prerequisite: Bitset function in STL library
Given a number N, the task is to find the absolute difference of the number of set and unset bits of this given number.
Examples:
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
Explanation:
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.
Approach:
- Count the total number of bits in the binary representation of the given number.
- Use bitset function defined in the STL library, to count the number of set bits efficiently.
- Then, we will subtract the set bits from the total number of bits to get the number of unset bits.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> 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<sz> 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
<script> // Javascript program for the above approach // Function to return the total bits // in the binary representation // of a number function totalbits(N) { return (1 + parseInt(Math.log(N) / Math.log(2), 10)); } // Function to calculate the // absolute difference function absoluteDifference(N) { let arr = N; let total_bits = totalbits(N); // Calculate the number of // set bits let set_bits = countSetBits(arr); // Calculate the number of // unset bits let unset_bits = total_bits - set_bits; let ans = Math.abs(set_bits - unset_bits); // Return the absolute difference return ans; } function countSetBits(n) { let count = 0; while (n > 0) { n &= (n - 1); count++; } return count; } // Given Number let N = 14; // Function Call document.write(absoluteDifference(N)); </script> |
2
Time Complexity: O(log N)
Auxiliary Space: O(1) as constant space for variables and bitset arr is used
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!