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

LeetCode四数之和题解遇整数溢出,用long long仍报错求助

四数之和整数溢出问题修复

你的代码里的溢出根源不是long long变量存不下值,而是**nums[j] + nums[i]这一步是纯int类型运算**。当两个int数值的和超出int的取值范围(-231到231-1)时,会先触发整数溢出,再把错误的结果赋值给long long类型的temp,这时候已经没法挽回了。比如报错里的-294967296 - 2000000000,本质是nums[i]+nums[j]的结果超出int最小值,导致溢出。

修复方案

只需要把相加的其中一个数先转成long long,让整个运算提升为long long类型,避免溢出:

把这一行:

long long int temp = target - (nums[j] + nums[i]);

改成以下任意一种都可以:

// 方式1:先转其中一个加数为long long
long long int temp = target - ( (long long)nums[i] + nums[j] );
// 方式2:拆分减法,逐个转成long long运算
long long int temp = (long long)target - nums[i] - nums[j];

修改后的完整代码

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> res;
        if(nums.empty()){
            return res;
        }
        int n = nums.size();
        sort(nums.begin(), nums.end());
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                // 修复溢出问题:先将target转为long long再做减法
                long long int temp = (long long)target - nums[i] - nums[j];
                int front = j+1;
                int back = n-1;
                while(front < back){
                    long long int twosum = nums[front] + nums[back];
                    if(twosum < temp){
                        front++;
                    }
                    else if(twosum > temp){
                        back--;
                    }
                    else{
                        vector<int> ans(4,0);
                        ans[0] =  (nums[i]);
                        ans[1] = (nums[j]);
                        ans[2] = (nums[front]);
                        ans[3] = (nums[back]);
                        res.push_back(ans);
                        while(front < back && nums[front] == ans[2]) ++front;
                        while(front < back && nums[back] == ans[3]) --back;
                    }
                }
                while(j+1 < n && nums[j+1] == nums[j]) ++j;
            }
            while(i+1 < n && nums[i+1] == nums[i]) ++i;
        }
        return res;
    }
};

内容的提问来源于stack exchange,提问作者Bharath Gowda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:35:15