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

1218. 最长定差子序列

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

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

思路:

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

    }
};
相关推荐
春日见1 小时前
丝滑快速拓展随机树 S-RRT(Smoothly RRT)算法核心原理与完整流程
人工智能·算法·机器学习·路径规划算法·s-rrt
Code小翊1 小时前
”回调“高级
算法·青少年编程
云里雾里!2 小时前
力扣 977. 有序数组的平方:双指针法的优雅解法
算法·leetcode·职场和发展
一只侯子4 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
jianqiang.xue5 小时前
别把 Scratch 当 “动画玩具”!图形化编程是算法思维的最佳启蒙
人工智能·算法·青少年编程·机器人·少儿编程
不许哈哈哈5 小时前
Python数据结构
数据结构·算法·排序算法
J***79396 小时前
后端在分布式系统中的数据分片
算法·哈希算法
sin_hielo7 小时前
leetcode 2872
数据结构·算法·leetcode
dragoooon348 小时前
[优选算法专题八.分治-归并 ——NO.49 翻转对]
算法
AI科技星8 小时前
为什么宇宙无限大?
开发语言·数据结构·经验分享·线性代数·算法