给定一个数组,返回最大子数组的累加和并且返回该子数组
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;
}
例如 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;
}
相关文章推荐
- 常用类 第一课
- Leetcode Shortest Word Distance
- 第二次作业——结对项目之需求分析与原型模型设计(未完成)
- 图形用户界面 第一课
- 测试的角色
- Android面试题 请解释下单线程模型中Message、Handler、MessageQueue、Looper之间的关系
- 使用Brackets
- 结果提前、自我退后,锁定目标、专注重复
- 如何判断一个网址是由哪种语言写的
- 如何判断一个网址是由哪种语言写的
- 阅读《构建之法》后的思考和疑问
- select使用实例
- 团队作业 #1
- vsftp服务详解
- 两个List比较各自对象的属性相同的问题
- 两个List比较各自对象的属性相同的问题
- 印象之初:BugPhobia’s Brief Introduction
- 死锁产生的原因及四个必要条件
- CSAW CTF 2015 PWN250
- 设计模式-工厂模式