0

The source of question:LeetCode — 338. Counting Bits in c

The introduce: 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:For num = 5 you should 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 should be O(n).

My code,appear Runtime Error when input 8(sometime 7), the result printf is true:

int* countBits(int num, int* returnSize) {
    *returnSize=num+1;
    int*arr=(int*)malloc(num+1);
    arr[0]=0;
    int i;
    for(i=1;i<num+1;i++){
        arr[i]=arr[i&(i-1)]+1;
        printf("%d\n",arr[i]);
    }
    return arr;
}
1
  • Rather than int*arr=(int*)malloc(num+1);, use int* arr = malloc(sizeof *arr * (num+1u)); Commented Jul 2, 2016 at 4:13

1 Answer 1

1

You're not allocating enough memory. You're currently allocating num+1 bytes, but what you really want is space for num+1 values of type int. So you need to multiply by the size:

int *arr=malloc(sizeof(int)*(num+1));
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.