网站收录怎么设置/全国最新疫情实时状况地图
题目地址:
https://leetcode.com/problems/longest-arithmetic-subsequence-of-given-difference/
给定一个长nnn数组AAA,和一个数ddd,问AAA中以ddd为公差的等差子序列的最长长度。
设f[x]f[x]f[x]为以xxx结尾的最长等差子序列的最长长度(可以将fff视为一个哈希表)。在遍历AAA的时候时刻维护A[0:i]A[0:i]A[0:i]这个区间的fff对应的信息。当遍历到A[i]A[i]A[i]的时候,A[0:i−1]A[0:i-1]A[0:i−1]的fff的信息已经求出,则以A[i]A[i]A[i]为结尾的最长子序列的长度应该是f[A[i]−d]+1f[A[i]-d]+1f[A[i]−d]+1(如果A[i]−dA[i]-dA[i]−d不存在,则f[A[i]−d]f[A[i]-d]f[A[i]−d]取000)。代码如下:
class Solution {public:int longestSubsequence(vector<int>& v, int d) {unordered_map<int, int> mp;int res = 0;for (int x : v) {if (!mp.count(x - d)) mp[x] = 1;else mp[x] = 1 + mp[x - d];res = max(res, mp[x]);}return res;}
};
时空复杂度O(n)O(n)O(n)。