动态规划
- 核心依然是dp[i]=max(dp[i-1]+array[i],array[i]),比(一)多了找出最大长度的子数组,说明存在dp[i]==dp[j]且 i!=j。
- 用start,end记录每次更新的子数组,start1,end1记录最长的子数组。
#include <cstdlib>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
// write code here
vector<int> v;
int sum=array[0];
int max_value=array[0];
int start=0;
int end=start;
int start1=start;
int end1=end;
for(int i=1;i<array.size();i++)
{
if(array[i]>sum+array[i])
{
sum=array[i];
start=i;
end=start;
}
else{
sum+=array[i];
}
if(sum>=max_value)
{
max_value=sum;
start1=start;
end1=i;
}
}
for(int i=start1;i<=end1;i++)
{
v.push_back(array[i]);
}
return v;
}
};