力扣1218. 最长定差子序列

动态规划

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

        return ans;
    }
};

相关推荐
共享家952721 小时前
经典动态规划题解
算法·leetcode·动态规划
Pluchon21 小时前
硅基计划3.0 Map类&Set类
java·开发语言·数据结构·算法·哈希算法·散列表
☼←安于亥时→❦1 天前
PyTorch之张量创建与运算
人工智能·算法·机器学习
子豪-中国机器人1 天前
枚举算法和排序算法能力测试
开发语言·c++·算法
qiuyunoqy1 天前
基础算法之二分算法 --- 2
算法
1白天的黑夜11 天前
栈-844.比较含退格的字符串-力扣(LeetCode)
c++·leetcode·
爱干饭的boy1 天前
手写Spring底层机制的实现【初始化IOC容器+依赖注入+BeanPostProcesson机制+AOP】
java·数据结构·后端·算法·spring
二哈不在线1 天前
代码随想录二刷之“动态规划”~GO
算法·golang·动态规划
cellurw1 天前
俄罗斯方块终端游戏实现 —— C语言系统编程与终端控制
c语言·算法
诸葛务农1 天前
光电对抗:多模/复合制导中算法和软件平台
算法