连续子数组的最大和_牛客题霸_牛客网 (nowcoder.com)
长度为n的数组,数组中的一个或连续多个整数组成一个数组,子数组最小长度为1
dp
数组来记录以每个位置为结尾的最大子数组和 ;
dp[0]
设置为数组的第一个元素array[0]
,并将maxres
初始化为dp[0];
从数组的第二个元素开始遍历,对于每个位置
i
,计算两个值:
dp[i-1]+array[i]
:表示将当前元素加入到以位置i-1
结尾的子数组中,得到一个新的子数组和。array[i]
:表示以当前元素为起点,重新开始一个新的子数组。将上述两个值中较大的一个赋值给
dp[i]
,表示以位置i
结尾的最大子数组和。同时,更新
maxres
为当前最大子数组和。
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
vector<int>dp(array.size(),0);
dp[0] = array[0];
int maxres = dp[0];
for(int i = 1; i < array.size(); i++){
dp[i] = max(dp[i-1]+array[i],array[i]);
maxres = max(dp[i],maxres);
}
return maxres;
}
};