运行时错误LeetCode - 338.在c中计算位数

时间:2016-07-02 03:58:33

标签: c

问题来源:LeetCode — 338. Counting Bits in c

介绍: 给定非负整数num。对于0≤i≤num范围内的每个数字i,计算其二进制表示中的1的数量,并将它们作为数组返回。

示例:对于num = 5,您应该返回[0,1,1,1,1]。

跟进:

很容易想出一个运行时间为O(n * sizeof(整数))的解决方案。但你能用线性时间O(n)/可能在一次通过吗?

空间复杂度应为O(n)。

我的代码,输入8时出现运行时错误(有时7),结果printf为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 个答案:

答案 0 :(得分:1)

你没有分配足够的内存。您当前正在分配num+1字节,但您真正想要的是num+1类型int的空间。所以你需要乘以大小:

int *arr=malloc(sizeof(int)*(num+1));