leetcode 1027:Longest Arithmetic Sequence
题意:给你一个数组A,求这个数组子序列中中最长等差序列,返回长度。
数组长度是[0,2000],数值长度是[0,10000]。
思路:简单DP吧。dp[i][j]表示的是以第i个数结尾,差是j的最大长度。
dp[i][A[i] - A[j]] = max(dp[i][A[i] - A[j]],dp[j][A[i]-A[j]]+1);
代码:
class Solution {
public:
int longestArithSeqLength(vector<int>& A) {
vector<map<int,int>>dp(2002);
for (int i = 0; i < A.size(); i++)
for (int j = i+1; j < A.size();j++)
dp[i][A[j] - A[i]] = 1;
int ans = 0;
for (int i = 1; i < A.size(); i++)
{
for (int j = 0; j < i; j++)
{
if (dp[j][A[i] - A[j]] != 0)
{
dp[i][A[i] - A[j]] = max(dp[i][A[i] - A[j]],dp[j][A[i]-A[j]]+1);
ans = max(ans, dp[i][A[i] - A[j]]);
}
}
}
return ans;
}
};