最长定差子序列
- 状态:
d p [ i ] dp[i] dp[i]表示以 i i i结尾的序列的最长定差子序列
- 转移方程:
d p [ i ] = m a x a [ i ] − a [ j ] = = d i f f { d p [ j ] + 1 } dp[i] = max_{a[i]-a[j]==diff}\{dp[j]+1\} dp[i]=maxa[i]−a[j]==diff{
dp[j]+1}
class Solution {
public:
int longestSubsequence(vector<int>& a, int dif) {
int ans = 1, n = a.size();
unordered_map<int,int> mp;
vector<int> dp(n,1);
mp[a[0]] = 0;
for(int i=1;i<n;i++){
int t = a[i]-dif;
if(mp.find(t)!=mp.end()) dp[i] = dp[mp[t]]+1;
ans = max(ans,dp[i]);
mp[a[i]] = i;
}
return ans;
}
};