给定一个数组Arr,返回子数组的最大累加和
例如 arr[] = {1,-2,3,5,-2,6,-1};所有子数组中,[3,5,-2,6] 可以累加出最大和12
函数在设计的时候,应该考虑传入的数组Arr,同时要有一个传出数组,返回值会最大累加和,为整数
以下是代码
#include <vector>#include <stack>
int maxSum(int arr[], int n,vector<int> &MaxChildArr)
{
if (arr == NULL || n <= 0)
return 0;
stack<int> st;
int Last = 0;
int max = 0;
int cur = 0;
for (int i = 0; i < n; i++)
{
cur += arr[i];
if (max < cur)
{
max = cur;
Last = i;
}
cur = cur < 0 ? 0 : cur;
if (cur == 0)
st.push(i);
}
int top;
while (!st.empty())
{
top = st.top();
if (top < Last)
break;
st.pop();
}
int first = top+1; // first与Last都是数组的下标,first是距离Last 最近的下标 && first<Last
for (int i = first; i <= Last; i++)
MaxChildArr.push_back(arr[i]);
return max;
}
int main()
{
vector<int> Vec;
int arr[] = { 1, -2, 3, 5, -2, 6, -1 };
maxSum(arr, sizeof(arr) / sizeof(arr[0]),Vec);
for (auto it = Vec.begin(); it != Vec.end(); it++)
cout << *it << " ";
cout <<" Over!"<< endl;
return 0;
}