动态规划版解题方案请移步->动态规划
如果序列
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]
的一个子序列)示例 1:
输入: arr = [1,2,3,4,5,6,7,8] 输出: 5 解释: 最长的斐波那契式子序列为 [1,2,3,5,8] 。
示例 2:
输入: arr = [1,3,7,11,12,14,18] 输出: 3 解释: 最长的斐波那契式子序列有 [1,11,12]、[3,11,14] 以及 [7,11,18] 。
class Solution {
public int lenLongestFibSubseq(int[] arr) {
int num = 2;
int endNum = 0;
for(int i = 0;i < arr.length;i++){
int sum = 0;
for(int k = i + 1;k < arr.length;k++){
sum = arr[i] + arr[k];
// System.out.print(arr[i]+" "+ arr[k]);
endNum = Math.max(endNum,num);
num = 2;
int arrk = arr[k];
for(int j = k + 1;j < arr.length ;j++){
if(arr[j] > sum) break;
if(arr[j] == sum){
// System.out.print(" " + arr[j]);
num++;
sum = arrk + arr[j];
arrk = arr[j];
}
}
// System.out.println();
}
}
return endNum==2?0:endNum;
}
}