力扣1218. 最长定差子序列

动态规划

  • 思路:
    • 定义 dp[v] 是值为 v 结尾的最长等差子序列个数;
    • 状态转移方程为:
      • v 上一个序列值为 v - d,即 dp[v] = dp[v - d] + 1;
    • 通过遍历序列,动态规划找到所有序列元素的最长等差数列的个数,结果为其中最大的值;
    • 因为下标不是连续的,可以使用哈希表来存储 dp;
class Solution {
public:
    int longestSubsequence(vector& arr, int difference) {
        int ans = 0;
        std::unordered_map dp;
        for (int v : arr) {
            dp[v] = dp[v - difference] + 1;
            ans = std::max(ans, dp[v]);
        }

        return ans;
    }
};

————————————————————————————————

力扣1218. 最长定差子序列_第1张图片

你可能感兴趣的:(力扣实践,leetcode,动态规划,算法)