[Leetcode 毎日の質問] 1027. 最長の算術シーケンス

最初はしばらく考えていませんでしたが、解決策を読んだ後、私はまだ 2 次元の動的計画法に慣れていないので、もっと練習する必要があることに気づきました。

解決策は次のとおりです

class Solution {
public:
    int longestArithSeqLength(vector<int>& nums) {
        int n = nums.size();
        int f[n][1001];
        memset(f,0,sizeof(f));
        int ans = 0;
        for(int i = 1;i < n; i++){
            for(int k = 0;k < i; k++){
                int j = nums[i] - nums[k] + 500;
                f[i][j] = max(f[i][j],f[k][j]+1);
                ans = max(ans,f[i][j]);
            }
        }
        return ans + 1;
    }
};

計画再帰は

f[i][j] = max(f[i][j],f[k][j]+1);

j は許容範囲です. 対応する各要素には、0 から独自の値までの対応する許容範囲配列があります. dp の本質は、時間の空間を変更することです. この質問の考え方は、対応する許容範囲配列の最長値を見つけることです.各要素、そして再帰的に ans 、そしてそれを出力します。

おすすめ

転載: blog.csdn.net/qq_63499305/article/details/130302069