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定义!!!

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