2016-07-02 4 views
0

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; 
} 
+0

Anstatt 'int * arr = (int *) malloc (num + 1);' verwenden 'int * arr = malloc (sizeof * arr * (num + 1u)); ' – chux

Antwort

1

Sie sind nicht genügend Speicher zuweisen. Sie belegen derzeit num+1 Bytes, aber was Sie wirklich wollen, ist Platz für num+1 Werte des Typs int. Sie müssen also durch die Größe multiplizieren:

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

danke.Ich vergesse die Verwendung von malloc.Accepted! – Rail

+1

@Rail FYI: [Annahme einer Antwort] (http://stackoverflow.com/help/accepted-answer) – dbush