Minimum number using set bits of a given number
Last Updated :
25 Nov, 2022
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.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...