题目
给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。 子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。
解题思路
用hashmap作为dp,状态转移dp[n]=dp[n-difference]+1
代码
class Solution {
public int longestSubsequence(int[] arr, int difference) {
int len = arr.length;
if (len < 1){
return 1;
}
int maxLen = 1;
HashMap<Integer, Integer> dp = new HashMap<>();
for (int i : arr) {
dp.put(i,dp.getOrDefault(i-difference,0)+1);//因为默认值为0,所以省略了赋值操作
maxLen = Math.max(maxLen,dp.get(i));
}
return maxLen;
}
}