给定一个数组,我试图找到最大的子数组和。子阵列如下。例如,我得到以下数组:[9, -7, 5, 3, 91]
。虽然[9, -7, 5]
是子数组,但[9, 5, 3, 91]
不是。我的代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int arraylen, subarraylen, subarraysum, itervar1, itervar2, itervar3, incrementvar;
cin >> arraylen;
vector<int> mainarray(arraylen);
vector<int> sumarray(arraylen * (arraylen-1) + 1);
for (itervar1 = 0; itervar1 < arraylen; itervar1++) {
cin >> mainarray[itervar1];
}
sumarray[0] = 0;
for (itervar1 = 0; itervar1 < arraylen; itervar1++) {
for (itervar2 = arraylen; itervar2 > 0; itervar2--) {
subarraylen = itervar2-itervar1;
if (subarraylen < 1) {
continue;
}
vector<int> subarray(subarraylen);
incrementvar = 0;
for (itervar3 = itervar1; itervar3 < itervar2; itervar3++) {
subarray[incrementvar] = mainarray[itervar3];
incrementvar++;
}
subarraysum = 0;
for (itervar3 = 0; itervar3 < subarraylen; itervar3++) {
subarraysum += subarray[itervar3];
}
}
}
return 0;
}
出于某种原因,它不起作用;只是无限循环。任何帮助将不胜感激。
答案 0 :(得分:2)
首先,这是列出所有子数组的例程:
vector<int> vec{ 9, -7, 5, 3, 91 };
int sz = vec.size();
for(int start = 0; start < sz; start++)
{
for(int end = start; end < sz; end++)
{
for(int j = start; j <= end; j++)
{
cout << vec[j] << ", ";
}
cout << "\n";
}
}
现在您只需要在循环total
中获取j
,然后添加到向量sum
。您不需要事先了解sum
的大小。使用push_back
将total
添加到sum
。
注意,数组本身作为子数组包含在内,您可以根据定义排除该数组。