2.Counting Bits
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.
Example 1:
Input: 2
Output: [0,1,1]
Example 2:
Input: 5
Output: [0,1,1,2,1,2]
Solution I : (Using STL)
class Solution
{
public:
vector<int> countBits(int num)
{
vector<int> v;
for (int i = 0; i <= num; i++)
{
bitset<32> b(i);
int x = b.count();
v.push_back(x);
}
return v;
}
};
Solution II:(Brian Kernighan’s Algorithm)
class Solution
{
public:
int countB(int n)
{
int count = 0;
while (n != 0)
{
n = n & (n - 1);
count++;
}
return count;
}
vector<int> countBits(int num)
{
vector<int> v;
for (int i = 0; i <= num; i++)
{
int x = countB(i);
v.push_back(x);
}
return v;
}
};
Time Complexity: O(n log n)
Solution III: (Using property of even odd no and division)
Algorithm: If i is even then it will have the same number of set bits as i / 2 because to get the number i we just shift the LSB in i / 2 by one. While shifting, the number of set bits in i/2 does not change. If i is odd then dividing the number means doing 1 right shift and here 1 set bit will be lost. So the number i/2 will have 1 set bit less than the original number.
class Solution
{
public:
vector<int> countBits(int num)
{
vector<int> v(num+1);
v[0] = 0;
for (int i = 1; i <= num; i++)
{
if(i%2==0){
v[i] = v[i/2];
}
else {
v[i] = 1 + v[i/2];
}
}
return v;
}
};
Time Complexity: O(n) , Space Complexity:O(n)
Last updated
Was this helpful?