解题步骤:
参考代码:
class Solution {
public:
int lenLongestFibSubseq(vector<int>& nums) {
int n=nums.size();
unordered_map<int,int> hash;
for(int i=0;i<n;i++)
{
hash[nums[i]]=i;
}
int ret=2;
vector<vector<int>> dp(n,vector<int>(n,2));
//先固定最后一个元素,因为至少三个元素才能组成斐波那契子序列,
//所以j可以从2开始
for(int j=2;j<n;j++)
{
//固定倒数第二个元素,同上,i从1开始
for(int i=1;i<j;i++)
{
int b=nums[i];
int c=nums[j];
int a=c-b;
//这里先判断a是否合法,再判断a在不在哈希表,因为查找效率更慢一下
if(a<b&&hash.count(a))
{
dp[i][j]=dp[hash[a]][i]+1;
}
ret=max(ret,dp[i][j]);
}
}
return ret<3?0:ret;
}
};
你学会了吗???