力扣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;
    }
};

相关推荐
im_AMBER2 小时前
算法笔记 09
c语言·数据结构·c++·笔记·学习·算法·排序算法
凯芸呢2 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
寂静山林2 小时前
UVa 1030 Image Is Everything
算法
AI柠檬2 小时前
几种排序算法的实现和性能比较
数据结构·算法·c#·排序算法
weixin_429630263 小时前
第6章 支持向量机
算法·机器学习·支持向量机
SweetCode3 小时前
C++ 实现大数加法
开发语言·c++·算法
王哈哈^_^3 小时前
【数据集】【YOLO】【目标检测】共享单车数据集,共享单车识别数据集 3596 张,YOLO自行车识别算法实战训推教程。
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
CodeWizard~4 小时前
AtCoder Beginner Contest 430赛后补题
c++·算法·图论
大大dxy大大4 小时前
机器学习-KNN算法示例
人工智能·算法·机器学习
关于不上作者榜就原神启动那件事5 小时前
模拟算法乒乓球
开发语言·c++·算法