动态规划

  • 核心依然是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;
    }
};