到目前为止我做了什么:
我已经使用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;
}
答案 0 :(得分:0)
请注意,您执行
res.push_back(a[i]);
在任何情况下,如果if(temp_sum>final_sum)
失败,请不要刷新res
顺便说一句,条件if(a[i]>temp_sum+a[i])
等于temp_sum <0
(不影响结果)