2つの同様のアップグレードバージョンを記録する(Huaweiの質問のようです)

1つは、最大のフィールド合計----->最大のサブマトリックス合計

1.1 leetcode53。最大サブオーダー合計

最大の連続するサブセグメントの合計。f [i]は、i番目の数字で終わる必要があることを意味します。つまり、この数字は必ず追加されるため、数字の前にパーツを追加するかどうかによって異なります。ゼロ以上を追加し、ゼロ未満を破棄します。古典的な動的プログラミングでは、単一の変数を使用してそれを実現しています。時間の複雑さO(n)。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if (nums.size()==0) return 0;
        int former=0;
        int ans=-0x3f3f3f3f;
        for (int i=0;i<nums.size();++i)
        {
            if (former>0) former+=nums[i];//这边也就是说必须以nums[i]为结尾的最大价值。
            else former=nums[i];
            if (former>ans) ans=former;
        }
        return ans;
    }
};

1.2 Lanqiaoカップ-最大サブマトリックス合計

行列が与えられ、最大のサブ行列の合計を見つけ、アルゴリズムは複数の行を1行に圧縮し、行iから行jに列挙し(i <= j)、これらの行を1行に圧縮し、次にO(m)が最大のサブ行列を見つけるセグメントの合計、合計時間の複雑さはO(n * n * m)

おすすめ

転載: blog.csdn.net/hbhhhxs/article/details/108118225