以前學的東西我記得很清楚!
我之前學習的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定義!!!