動的なプログラミングと最大フィールド(ギャンブラーは、法律を理解して)

問題の説明

NUMSに整数の配列を与えられ、その最大値とリターンを有する連続サブアレイ(最小要素を含むサブアレイ)の最大値を見つけます。
例:
入力:[-2,1、-3,4、-1,2,1、-5,4]、
出力:6
説明:連続サブアレイ[4、-1,2,1]、最大、 6。

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/maximum-subarray

ダイナミック企画のアイデア

あなたはお金や失うお金に勝つことを配列ここ数日、あなたはギャンブラー選択的忘却していると仮定し、
あなたは、勝ち負けの過去数日間を表現するために合計を使用し
、ほとんどのお金を勝つためにあなたの手を格納するためのANSに

あなたの手はまだ(合計昨日お金を失っている場合は<0)、あなたは明日ギャンブル続けるために、それを忘れて、
あなたの手で(合計勝利した場合>; 0)を、あなたがギャンブルを続けて、覚えて
、あなたは何回あなたの最高の幸運を覚えています

完全なコード

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int len = nums.size();
        if(len==0) return 0;
        // dp[i]表示以i结尾的时候最大的字段和
        int dp[len];
        int mm;
        dp[0] = nums[0];
        mm = nums[0];
        for(int i=1;i<len;i++){
            dp[i] = max(dp[i-1]+nums[i],nums[i]);
            if(dp[i] > mm) mm = dp[i];
        }
        return mm;
    }
};

説明リンク

著者:acnesuの
リンクします。https://leetcode-cn.com/problems/maximum-subarray/solution/jia-she-ni-shi-yi-ge-du-tu-by-acnesu/
出典:滞在ボタン(LeetCode)
著作権は著者が保有しました。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

公開された34元の記事 ウォン称賛13 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43497702/article/details/104108712