Minimum number using set bits of a given number
Given an unsigned number, find the minimum number that could be formed by using the bits of the given unsigned number.
Examples :
Input : 6
Output : 3
Binary representation of 6 is 0000….0110. Smallest number with same number of set bits 0000….0011.
Input : 11
Output : 7
Simple Approach:
1. Find binary representation of the number using simple decimal to binary representation technique.
2. Count number of set bits in the binary representation equal to ‘n’.
3. Create a binary representation with it’s ‘n’ least significant bits set to 1.
4. Convert the binary representation back to the number.
Efficient Approach:
1. Just measure the number of 1’s present in the bit representation of the number.
2. (Number of set bits raised to the power of 2) – 1 represents the minimized number.
C++
#include <bits/stdc++.h>
#define ll unsigned int
using namespace std;
ll minimize(ll a)
{
ll n = _popcnt32(a);
return ( pow (2, n) - 1);
}
int main()
{
ll a = 11;
cout << minimize(a) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG
{
public static int _popcnt32( long number)
{
int count = 0 ;
while (number > 0 )
{
count += number & 1L;
number >>= 1L;
}
return count;
}
static long minimize( long a)
{
int n = _popcnt32(a);
return (( long )Math.pow( 2 , n) - 1 );
}
public static void main(String args[])
{
long a = 11 ;
System.out.print(minimize(a));
}
}
|
Python3
def minimize(a):
n = bin (a).count( "1" )
return ( pow ( 2 , n) - 1 )
a = 11
print (minimize(a))
|
C#
using System;
using System.Linq;
using System.Collections.Generic;
class GFG
{
static long minimize( long a)
{
string binaryString = Convert.ToString(a, 2);
int n = binaryString.Split( new [] { '0' },
StringSplitOptions.RemoveEmptyEntries).Length + 1;
return (( long )Math.Pow(2, n) - 1);
}
static void Main()
{
long a = 11;
Console.Write(minimize(a));
}
}
|
Javascript
<script>
function _popcnt32(number)
{
let count = 0;
while (number > 0)
{
count += number & 1;
number >>= 1;
}
return count;
}
function minimize(a)
{
let n = _popcnt32(a);
return (Math.pow(2, n) - 1);
}
let a = 11;
document.write(minimize(a));
</script>
|
Time Complexity: O(log N), as the _popcnt32 has a time complexity O(logN), however, _popcnt32 has a maximum value of O(log32), so it can be interpreted as O(1) as well.
Auxiliary Space: O(1)
Note : The above code uses GCC specific functions. If we wish to write code for other compilers, we may use Count set bits in an integer.
Last Updated :
25 Nov, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...