/*思路:
使用动态规划
F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变
F(i)=max(F(i-1)+array[i] , array[i])
res:所有子数组的和的最大值
res=max(res,F(i))
*/
将介绍两种不同的实现方式,但其基本思路是一致的。
//方法一
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int res = array[0];//记录当前所有子数列的最大值
int maxv = array[0];//包含array[i]的连续数组的最大值
for(int i=1;i<array.size();i++){
maxv = max(maxv+array[i],array[i]);
res = max(maxv,res);
}
return res;
}
};
//方法二
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int res = array[0];
int maxv = array[0];
for(int i=1;i<array.size();i++){
if(maxv<=0){
maxv = array[i];
}else{
maxv += array[i];
}
if(maxv>res){
res = maxv;
}
}
return res;
}
};