我不明白leet代码变量声明
正确的解决方案
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int rightsum = 0;
int leftsum = 0; // this problem point
for(int i = 0; i < nums.size(); i++){
rightsum += nums[i];
}
for (int i = 0; i < nums.size(); i++){
rightsum -= nums[i];
if(rightsum == leftsum) {
return i;
}
leftsum += nums[i];
};
return -1;
}
};
错误的解决方案
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int rightsum, leftsum = 0; // this problem point
for(int i = 0; i < nums.size(); i++){
rightsum += nums[i];
}
for (int i = 0; i < nums.size(); i++){
rightsum -= nums[i];
if(rightsum == leftsum) {
return i;
}
leftsum += nums[i];
};
return -1;
}
};
我无法理解两者的代码差异。两个代码都可以声明变量吗?在 Dev-C++ 中编码时是可能的,但在这里不行。有什么不同?
回答
这个
int rightsum, leftsum = 0; // this problem point
相当于
int rightsum;
int leftsum = 0;
rightsum未初始化,它具有不确定的值。那么这里
rightsum += nums[i];
您rightsum在初始化之前正在阅读。那是未定义的行为。有可能在调试版本rightsum中使用 初始化0,或者您只是非常不走运并且代码似乎偶然工作。
一个常见的建议是每行声明一个变量以避免此类错误。此外,您应该尝试始终初始化变量。