You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode代码运行报signed integer overflow错误,换long long仍未解决

解决signed integer overflow:accumulate导致的整数溢出问题

你的错误根源在于accumulate函数的调用方式:虽然你把sumfromend声明为long long int,但accumulate的第三个参数传递的是0(int类型),这会让函数内部用int类型执行累加操作。当数组元素总和超过int的最大值(2147483647)时,就会触发溢出——哪怕最后把结果赋值给long long也没用,因为溢出已经在累加过程中发生了。

修复方案

把accumulate的初始值改为0LL(long long类型的0),这样函数会用long long类型完成整个累加过程,从根源避免溢出:

long long int sumfromend = accumulate(nums.begin(), nums.end(), 0LL);

修改后的完整代码

class Solution {
public:
    int minimumAverageDifference(vector<int>& nums) {
        long long int n = nums.size();
        long long int sumfromstart = 0;
        long long int sumfromend = accumulate(nums.begin(), nums.end(), 0LL);
        int res = INT_MAX;
        int index = 0;
        for(int i=0; i<n; i++)
        {
            sumfromstart += nums[i];
            sumfromend -= nums[i];
            int a = sumfromstart/(i+1);
            int b = (i == n-1)? 0 : sumfromend/(n-i-1);
            int avg = abs(a-b);
            if(avg < res)
            {
                res = avg;
                index = i;
            }
        }
        return index;
    }
};

补充说明

accumulate的模板推导规则是:累加结果的类型由第三个初始值参数的类型决定。传递0时,类型是int,所以累加过程中所有中间值都是int,一旦总和超过int上限就会溢出;传递0LL时,类型是long long,整个累加过程都会用long long计算,自然不会出现溢出问题。

内容的提问来源于stack exchange,提问作者Ojaswi Awasthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:10:25