Leetcode 689.重複しない3つのサブアレイの最大合計(68日目)----動的計画法の学習期間(1つの朝にいくつかの難しい質問をすることはできません)

元のタイトル

ここに画像の説明を挿入


コードの実装(n ^ 3時間計算量の最初のブラシタイムアウト)

class Solution {
    
    
public:
    vector<int> maxSumOfThreeSubarrays(vector<int>& nums, int k) {
    
    
        int n = nums.size(),end,start,gap,max = -1,tmp;
        vector<int> temp(n,0),dp(temp);
        vector<int> ret(3,0);
        for(int i=0;i<n;i++)
            temp[i] = (i ? temp[i-1]:0) + nums[i];
        for(start = 0;start<=n-k;start++)
            dp[start] = temp[start+k-1] - (start ? temp[start-1] : 0); 
        
        for(start=0;start<=n-(k<<1)-k;start++)
        {
    
    
            for(gap=start+k;gap<=n-(k<<1);gap++)
            {
    
    
                for(end=gap+k;end<=n-k;end++)
                {
    
    
                    tmp = dp[start] + dp[gap] + dp[end];
                    if(tmp > max)
                    {
    
    
                        max = tmp;
                        ret[0] = start,ret[1] = gap,ret[2] = end;
                    }
                }
            }
        }
        return ret;
    }
};

おすすめ

転載: blog.csdn.net/qq_37500516/article/details/115166021