最长的斐波那契子序列的长度
如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的:
n >= 3,对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}
给定一个严格递增的正整数数组形成序列 arr ,找到 arr 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 0 。
(回想一下,子序列是从原序列 arr 中派生出来的,它从 arr 中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。例如, [3, 5, 8] 是 [3, 4, 5, 6, 7, 8] 的一个子序列)
typedef struct
{
int key;
int val;
UT_hash_handle hh;
}HashItem;
int lenLongestFibSubseq(int* arr, int arrSize){
HashItem *indices=NULL,*pEntry=NULL;
for(int i=0;i<arrSize;i++)
{
pEntry=(HashItem *)malloc(sizeof(HashItem));
pEntry->key=arr[i];
pEntry->val=i;
HASH_ADD_INT(indices,key,pEntry);
}
int dp[1000][1000];
memset(dp,0,sizeof(dp));
int i,j,k,max=2,temp;
for(i=0;i<arrSize;i++)
{
for(j=i+1;j<arrSize;j++)
{
temp=arr[i]+arr[j];
pEntry=NULL;
HASH_FIND_INT(indices,&temp,pEntry);
if(pEntry)
{
k=pEntry->val;
}
if(k>=0&&k<arrSize)
{
dp[j][k]=(dp[i][j]+1)>3? (dp[i][j]+1):3;
if(dp[j][k]>max)
max=dp[j][k];
}
}
}
HashItem *cur=NULL,*tmp=NULL;
HASH_ITER(hh,indices,cur,tmp)
{
HASH_DEL(indices,cur);
free(cur);
}
return max;
}
我的代码哪里有问题,帮我看一看,感谢