2016-07-02 5 views
0

で338カウントビット質問のソース:LeetCode — 338. Counting Bits in cランタイムエラーLeetCode - C

紹介:非負の整数番号num考える を。 0≤i≤numの範囲にあるすべての数iに対して、2進表現で1の数を計算し、配列として返します。

例:num = 5の場合、[0,1,1,2,1,2]を返す必要があります。

フォローアップ:

実行時のO(n個の*のはsizeof(整数))と解決策を考え出すことは非常に簡単です。しかし、あなたは線形時間でそれを行うことができますかO(n)/おそらく単一のパスで?

空間の複雑さはO(n)である必要があります。あなたは十分なメモリを割り当てていない

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

むしろ 'int型* ARR =(int型*)はmalloc(NUM + 1)より;'、 'int型* ARR =のmalloc(はsizeof *編曲:*(NUM +を使用します1u)); ' – chux

答えて

1

:入力8(いつか7)は、結果のprintfが真であるとき

私のコードは、ランタイムエラーが表示されます。現在、num+1バイトを割り当てていますが、実際にはnum+1の値はintの値になります。だから、サイズによって乗算する必要があります。

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

ありがとう。私はmalloc.Acceptedの使い方を忘れてしまいました! – Rail

+1

@Rail FYI:[回答を受け入れる](http://stackoverflow.com/help/accepted-answer) – dbush

関連する問題