原题链接:Leecode 1027. 最长等差数列
参考:最长等差数列
class Solution {
public:
int longestArithSeqLength(vector<int>& nums) {
int n=nums.size();
if(n==1) return 0;
int res=0;
//dp[i][j] 表示以 nums[i] 结尾的公差为 j 的等差数列的最长值。
vector<vector<int>> dp(n,vector<int>(1010));
for(int i=0;i<n;i++)
{
for(int j=0;j<i;j++)
{
int d=nums[i]-nums[j]+500;
dp[i][d]=max(dp[i][d],dp[j][d]+1);
res=max(res,dp[i][d]);
}
}
return res+1;
}
};