Die Quelle der Frage: LeetCode — 338. Counting Bits in cRuntime Error LeetCode - 338. Zählen Bits in c
Die vorstellen: eine nicht negative ganze Zahl num gegeben. Für jede Zahl i im Bereich 0 ≤ i ≤ num berechnen Sie die Anzahl der 1en in ihrer Binärdarstellung und geben sie als Array zurück.
Beispiel: Für num = 5 sollten Sie [0,1,1,2,1,2] zurückgeben.
Follow up:
Es ist sehr einfach mit einer Lösung mit Laufzeit O (n * sizeof (integer)) zu entwickeln. Aber können Sie es in linearer Zeit O (n)/möglicherweise in einem einzigen Durchgang tun?
Raumkomplexität sollte O (n) sein.
Mein Code, erscheinen Laufzeitfehler, wenn der Eingang 8 (manchmal 7), das Ergebnis printf wahr ist:
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;
}
Anstatt 'int * arr = (int *) malloc (num + 1);' verwenden 'int * arr = malloc (sizeof * arr * (num + 1u)); ' – chux