我不明白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,或者您只是非常不走运并且代码似乎偶然工作。

一个常见的建议是每行声明一个变量以避免此类错误。此外,您应该尝试始终初始化变量。


以上是我不明白leet代码变量声明的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>