338. Counting Bits, 338 countingbits
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:
Fornum = 5
You shoshould return[0,1,1,2,1,2]
.
Follow up:
It is very easy to come up with a solution with run time O (n * sizeof (integer )). but can you do it in linear time O (n)/possibly in a single pass?
Space complexity shocould be O (n ).
Can you do it like a boss? Do it without using any builtin function like _ builtin_popcount in c ++ or in any other language
1 /** 2 * Return an array of size *returnSize. 3 * Note: The returned array must be malloced, assume caller calls free(). 4 */ 5 int* countBits(int num, int* returnSize) { 6 int *ary; 7 int i; 8 int k; 9 ary = (int *)malloc((num + 1) * sizeof(int));10 for(i = 0; i <= num; i++)11 {12 ary[i] = 0;13 k = i;14 while(k)15 {16 k &= (k-1);17 ary[i]++;18 }19 }20 *returnSize = num + 1;21 return ary;22 }