如何修改 Kadane 算法以找出贡献最大总和的子数组元素?
How do I modify Kadane's algorithm to find out the subarray elements that contribute to the maximum sum?
到目前为止我做了什么:
我已经使用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
(不影响结果)
相关文章:
- 如何访问宏中定义的数组元素
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 删除在结构 c++ 中声明的数组元素
- Getter 和 Setter 用于类 C++ 中的数组元素
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 将函数分配给C 中的数组元素
- CUDA C/C 访问先前的数组元素
- 访问边界外的数组元素会损坏它
- 将多种数据类型写入文件时的其他行和额外的数组元素
- 将大于k的数组元素导入到另一个数组C 中
- 没有可行的构造函数复制类型 'MyString' 的数组元素
- "Free" C++ 中的数组元素
- 默认构造函数自动创建的数组元素?
- 如何每行打印特定数量的数组元素
- OpenCV函数来计算类似于MATLAB产品的数组元素的乘积?
- 从 5x10^8 个不同的数组元素读取,每次读取 4 个字节
- 如何访问指针的数组元素
- 用于移动不起作用的数组元素的函数
- 查找等于给定和的数组元素