
解题步骤:




参考代码:
class Solution {
public:
int longestArithSeqLength(vector<int>& nums) {
int n=nums.size();
int ret=2;
unordered_map<int,int> hash;
//这里可以先把nums[0]存进哈希表中,方便后面i从1开始遍历
hash[nums[0]]=0;
vector<vector<int>> dp(n,vector<int>(n,2));
for(int i=1;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int b=nums[i];
int c=nums[j];
int a=2*b-c;
if(hash.count(a))
{
dp[i][j]=dp[hash[a]][i]+1;
}
ret=max(ret,dp[i][j]);
}
//第i行填完之后记得把这个nums[i]和i绑定放进哈希表中
hash[nums[i]]=i;
}
return ret;
}
};
你学会了吗???

文章介绍了如何使用C++实现一个名为Solution的类中的longestArithSeqLength函数,通过动态规划求解给定整数数组中的最长等差子序列长度,利用哈希表优化查找过程。
951

被折叠的 条评论
为什么被折叠?



