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

相关推荐
第二只羽毛3 分钟前
遵守robots协议的友好爬虫
大数据·爬虫·python·算法·网络爬虫
艾斯比的日常22 分钟前
Java 三色标记算法:并发垃圾回收的核心技术解析
java·开发语言·算法
CoovallyAIHub32 分钟前
抛弃LLM!MIT用纯视觉方法破解ARC难题,性能接近人类水平
深度学习·算法·计算机视觉
程序猿编码37 分钟前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
高洁011 小时前
具身智能-视觉语言导航(VLN)
深度学习·算法·aigc·transformer·知识图谱
Croa-vo1 小时前
TikTok 数据工程师三轮 VO 超详细面经:技术深挖 + 建模推导 + 压力测试全记录
javascript·数据结构·经验分享·算法·面试
蘑菇小白1 小时前
时间复杂度
数据结构·算法
czlczl200209251 小时前
算法:组合问题
算法·leetcode·职场和发展
CoderYanger1 小时前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节
Cx330❀2 小时前
C++ STL set 完全指南:从基础用法到实战技巧
开发语言·数据结构·c++·算法·leetcode·面试