最大子数组和C ++

时间:2017-10-25 00:53:42

标签: c++ arrays

给定一个数组,我试图找到最大的子数组和。子阵列如下。例如,我得到以下数组:[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;
}

出于某种原因,它不起作用;只是无限循环。任何帮助将不胜感激。

1 个答案:

答案 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_backtotal添加到sum

注意,数组本身作为子数组包含在内,您可以根据定义排除该数组。