如何修改 Kadane 算法以找出贡献最大总和的子数组元素?

How do I modify Kadane's algorithm to find out the subarray elements that contribute to the maximum sum?

本文关键字:和的 数组元素 何修改 修改 算法 Kadane      更新时间:2023-10-16

到目前为止我做了什么:

我已经使用Kadane的算法找出了总和。

我创建了一个向量"res",用于在满足条件时存储元素。

问题:例如,当输入是一个数组时:{-2, -3, 4, -1, -2, 1, 5, -3}结果数组包含正确的子数组元素以及 1 个额外的元素,当条件失败时会添加该元素。

tldr:代码返回输出子数组:{4 -1 -2 1 5 -3}而正确的输出应该是 {4, -1, -2, 1, 5}

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int i, a[10], n, temp_sum=0, final_sum=0;
    vector<int> res;
    cin >> n;                               //getting array size input
    for(i=0; i<n; i++)
    {
        cin >> a[i];                        //getting array elements input
    }
    temp_sum=a[0];                          //initializing to first element
    final_sum=a[0];
    for(i=1; i<n; i++)
    {
        if(a[i]>temp_sum+a[i])       //if element is greater than sum so far
        {
            temp_sum = a[i];
            res.clear();
            res.push_back(a[i]);
        }
        else
        {
            temp_sum = a[i] + temp_sum;
            cout << temp_sum << " " << final_sum << " " << a[i] << "n";
            res.push_back(a[i]);
        }
        if(temp_sum>final_sum)
        {
            final_sum = temp_sum;
        }
    }
    cout << final_sum << "n";                  //displaying maximum sum
    for(i=0; i<res.size(); i++)                 //displaying result vector
    {
        cout << res[i] << " ";
    }
    return 0;
}

注意你执行

res.push_back(a[i]);

在任何情况下,如果失败if(temp_sum>final_sum)请不要刷新 res。

顺便说一下,条件if(a[i]>temp_sum+a[i])等于temp_sum <0(不影响结果)