LeetCode 最长定差子序列(dp)

题目传送
在这里插入图片描述
思路:
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;
    }
};

猜你喜欢

转载自blog.csdn.net/moasad/article/details/121168904