Leetcode1365,刷新了我對leetcode判題系統的認知

Leetcode1365

以前學的東西我記得很清楚!

我之前學習的C的語法,初始化的語句都是執行一遍

for(int i=0;i<10;i++){
	int localvar = 0;//這個語句在執行的時候,僅執行一遍的,
					 //也就是localvar被賦值0僅在第1次循環時執行,後邊的9次循環不再執行這條語句。
	
	//....
}

然而,leetcode認爲我錯了

但是我的提交,莫名出錯
出錯展示

然後靈機一動,這麼改了,就對了~

正例展示我很迷茫

下附出錯代碼

//以下是錯誤代碼
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
    int* Tong = (int *)malloc(101*sizeof(int));
    for(int i=0;i<101;i++){
        Tong[i] = 0;
    }

    for(int i=0;i<numsSize;i++){
        Tong[nums[i]]++;
    }
    
    for(int i=0;i<101;i++){
        int lastsmall = 0;
        int sum = 0;
        if(Tong[i]!=0){
            lastsmall = Tong[i];
            Tong[i] = sum;
            sum = lastsmall + sum;
        }
    }
    
    int* returnAns = (int *)malloc(numsSize*sizeof(int));
    *returnSize = numsSize;
    for(int i=0;i<numsSize;i++){
        returnAns[i] = Tong[nums[i]];
    }
    free(Tong);
    return returnAns;
}

下附正確代碼

//以下是正確代碼
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
    int* Tong = (int *)malloc(101*sizeof(int));
    for(int i=0;i<101;i++){
        Tong[i] = 0;
    }

    for(int i=0;i<numsSize;i++){
        Tong[nums[i]]++;
    }
    
    int lastsmall = 0;
    int sum = 0;
    for(int i=0;i<101;i++){
        if(Tong[i]!=0){
            lastsmall = Tong[i];
            Tong[i] = sum;
            sum = lastsmall + sum;
        }
    }
    
    int* returnAns = (int *)malloc(numsSize*sizeof(int));
    *returnSize = numsSize;
    for(int i=0;i<numsSize;i++){
        returnAns[i] = Tong[nums[i]];
    }
    free(Tong);
    return returnAns;
}

經驗教訓

Leetcode刷題,for循環內部不要定義局部變量,就算僅在for循環內部有效,也要在for上邊緊挨着for定義!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章