2016-07-02 2 views
0

에서 338 계수의 비트 질문의 소스 : LeetCode — 338. Counting Bits in c런타임 오류 LeetCode - C

이 (가) 소개 : 아닌 음의 정수 번호 NUM을 감안할 때. 0 ≤ i ≤ num의 범위에있는 모든 숫자 i에 대해 이진 표현에서 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'보다 더 * 편곡 = (INT의 *)의 malloc (NUM + 1) : 그래서 당신은 크기를 곱해야 1u));' – chux

답변

1

: 입력 8 (가끔 7), 결과의 printf에 해당하는 경우

내 코드는 런타임 오류를 나타납니다. 현재 num+1 바이트를 할당하고 있지만 실제로 원하는 것은 num+1int 값의 공간입니다. +`사용`INT * 편곡 = malloc을 (를 sizeof * 도착 * (NUM,

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

감사합니다. malloc의 사용법을 잊어 버렸습니다. 받아 들여졌습니다! – Rail

+1

@Rail 참고 : [답변 수락] (http://stackoverflow.com/help/accepted-answer) – dbush