力扣题解( 最长定差子序列)

1218. 最长定差子序列

给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference

子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。

思路:

本题的思路很简单,规定dpi是包含i位置元素的最长定差子序列,此时只需要确认在(0-i-1)位置中是否存在一个下标j,是的i位置元素减j位置元素仍时diffenence,则此时dpi=dpj+1.本题的优化是利用哈希表,存放已经求出最长定差子序列的元素和对应的下标,这样可以在O(1)时间内查找(0-i-1)中是否存在值为arri-difference的元素。

复制代码
class Solution {
public:
    int longestSubsequence(vector<int>& arr, int difference) {
     
     int n=arr.size();
     vector<int>dp(n,1);
     unordered_map<int,int>hash;
     hash[arr[0]]=0;
     for(int i=1;i<n;i++)
     {
        if(hash.count(arr[i]-difference))
        {
            dp[i]=dp[hash[arr[i]-difference]]+1;
        }
        hash[arr[i]]=i;
     }
     
     int ret=0;
     for(auto e:dp)
     {
        ret=max(ret,e);
     }

     return ret;

    }
};
相关推荐
这料鬼有毒8 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃9 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
爱吃苹果的日记本9 小时前
数据结构第五课
数据结构·学习
Logic10110 小时前
C语言/数据结构贪心算法题解:买卖股票的最佳时机——一次交易最大利润(O(n)时间O(1)空间)
c语言·数据结构·贪心算法·数组·时间复杂度·算法题·股票交易
Logic10110 小时前
C语言/数据结构位运算题解:异或XOR找出货币交易中的“独特面值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
ctlover11 小时前
数据结构:树
数据结构·python
GreenTea11 小时前
发布 3 天登顶 HN:不生成一个字的模型 Jev,我把它的源码和黑料都扒了一遍
前端·后端·算法
庖丁解牛11 小时前
无穷小不是一个“神秘小数”,而是一场奔向 0 的过程
算法
ZPC821012 小时前
YOLO26 识别串番茄果梗
人工智能·深度学习·算法·机器学习
景熙552312 小时前
14.Java 集合框架从入门到源码万字详解(含 ArrayList/LinkedList/HashMap 源码、泛型通配符、红黑树)
java·开发语言·数据结构·算法