题目传送
思路:
dp,记录一下当前的数减去等差值在当前数的前面出现过没有,如果出现过,则直接在前面的基础上加一即可。然后记录最大值
AC代码
class Solution {
public:
int longestSubsequence(vector<int>& arr, int difference) {
int len = arr.size();
int Max = 1,dp[100005] = {
0};
map<int,int> mp;
for(int i = 0;i < len;i++){
int pos = i+1;
if(mp[arr[i]-difference]){
dp[pos] = dp[mp[arr[i]-difference]] + 1;
Max = max(Max,dp[pos]);
}
else{
dp[pos] = 1;
}
mp[arr[i]] = pos;
}
// cout << Max << endl;
return Max;
}
};