您的位置:首页 > 职场人生

面试题31——连续子数组的最大和

2015-07-29 14:30 531 查看

题目描述

输入一个数组,有正数也有负数,求连续子数组的最大和。

解题思路

典型动态规划

设f(i) 表示 以i位置结尾的子数组和,那么有:

递推式:f(i) = max{ f(i-1) + array[i], array[i] }

初值:f(0) = array[0]

实现代码

class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {

if(array.empty())
return 0;

int retMax=INT_MIN;
int len = array.size();
vector<int> ans(len,INT_MIN);

ans[0] = array[0];
retMax = ans[0];

for(int i=1; i<len; i++)
{
ans[i] = getMax( (ans[i-1] + array[i]), array[i]);

if(ans[i] > retMax)
retMax = ans[i];
}

return retMax;

}

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