Code 1.0
class Solution {
public:
int lenLongestFibSubseq(vector<int>& A) {
int res = 2;
for ( int i = 0 ; i < A.size()-2 ; i++ ){
for ( int j = i+1 ; j < A.size()-1 ; j++ ){
int tes = 2;
int sum = A[i]+A[j];
int k = j+1;
int pre = A[j];
while ( find (A.begin()+j,A.end(),sum) != A.end() ){
tes++;
sum = sum+pre;
pre = sum-pre;
}
res = max ( res , tes );
}
}
return res == 2 ? 0:res;
}
};
问题
看了解法,简单循环可以AC,但写出来疯狂超时
添加vector转换为set查找后即可
Code 2.0(AC)
class Solution {
public:
int lenLongestFibSubseq(vector<int>& A) {
set<int> aset(A.begin(), A.end());
int res = 2;
for ( int i = 0 ; i < A.size()-2 ; i++ ){
for ( int j = i+1 ; j < A.size()-1 ; j++ ){
int tes = 2;
int sum = A[i]+A[j];
int k = j+1;
int pre = A[j];
while ( aset.find (sum) != aset.end() ){
tes++;
sum = sum+pre;
pre = sum-pre;
}
res = max ( res , tes );
}
}
return res == 2 ? 0:res;
}
};