您的位置:首页 > 其它

给定一个数组,返回最大子数组的累加和并且返回该子数组

2015-09-23 01:14 369 查看
给定一个数组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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: