本文主要是介绍最长的斐波那契子序列的长度【暴力解法】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
动态规划版解题方案请移步->动态规划
12.13 最长的斐波那契子序列的长度
如果序列
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;}
}
这篇关于最长的斐波那契子序列的长度【暴力解法】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!