Skip to content

【hash】最长定差子序列

最长定差子序列

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

\(O(n)\) 哈希即可(也可以看成是动态规划)。

class Solution {
public:
    int longestSubsequence(vector<int>& arr, int difference) {
        unordered_map<int, int> m;
        int ans = 1;
        for (int i = 0; i < arr.size(); i++) {
            int x = arr[i];
            int y = x - difference;
            if (m.count(y)) m[x] = m[y] + 1;
            else m[x] = 1;
            //cout << x << " = " << m[x] << endl;
            ans = max(ans, m[x]);
        }
        return ans;
    }
};