问题来源: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;
}
答案 0 :(得分:1)
你没有分配足够的内存。您当前正在分配num+1
字节,但您真正想要的是num+1
类型int
的空间。所以你需要乘以大小:
int *arr=malloc(sizeof(int)*(num+1));