最长的斐波那契子序列的长度

  • 题目
  • 大致思路
  • 代码实现

题目

  • 给定一个严格递增的正整数数组形成序列,找到 A 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 0 。

  • 两个示例:


输入: [1,2,3,4,5,6,7,8]
输出: 5
解释:
最长的斐波那契式子序列为:[1,2,3,5,8] 输入: [1,3,7,11,12,14,18]
输出: 3
解释:
最长的斐波那契式子序列有:
[1,11,12],[3,11,14] 以及 [7,11,18] 。

大致思路

  1. Map存值,存索引,找出值之和对应的索引,遵从这个公式:
    A[i][j] = A[j][k]+1,默认A[i][j]=2;因为最少两个值才能构成数列

代码实现

package com.immunize.leetcode.lenLongestFibSubseq;import java.util.HashMap;
import java.util.Map;/*** *   A:1  2   3  4   5*   i=3递减开始*   i=3,j=4,A[3]+A[4]=4+5=9,不包含在map中,tmp[3][4] = 2*   i=2,j=3,A[2]+A[3]=3+4=7,不包含在map中,tmp[2][3] = 2*   i=2,j=4,A[2]+A[4]=3+5=8,不包含在map中,tmp[2][4] = 2*   ...*   ...*   i=0,i=1,A[0]+A[1]=3,包含在map中,tmp[0][1] = tmp[1][2]+1=3;*   ...*   ...*   返回retData和tmpData中较大的值,即为所求。* * @author Mr IMMUNIZE**/
public class Solution {public int lenLongestFibSubseq(int[] A) {// 计数用dataint data = 0;int length = A.length;// 新建Map存放值和对应的索引Map<Integer, Integer> dataMap = new HashMap<>();for (int i = 0; i < length; i++) {dataMap.put(A[i], i);}// 新建data_tmp二维数组,维数为A的长度int[][] data_tmp = new int[length][length];// 从倒数第二个数开始倒序遍历,递归 长度为length,最大索引为length-1,for (int i = length - 2; i >= 0; i--) {for (int j = i + 1; j < length; j++) {// 若i,j处均存在值if (dataMap.get(A[i] + A[j]) != null) {// A[i] + A[j] = A[k],判断是否存在这个kint tmp = A[i] + A[j];int position = dataMap.get(tmp);data_tmp[i][j] = data_tmp[j][position] + 1;data = Math.max(data, data_tmp[i][j]);} else {data_tmp[i][j] = 2;}}}// 最终返回比较结果return data;}
}

20191026(补):(leetcode习题)最长的斐波那契子序列的长度相关推荐

  1. leetcode - 873. 最长的斐波那契子序列的长度(使用到哈希表)

    873. 最长的斐波那契子序列的长度 -------------------------------------------- 如果序列 X_1, X_2, -, X_n 满足下列条件,就说它是斐波那 ...

  2. LeetCode 873. 最长的斐波那契子序列的长度(动态规划)

    文章目录 1. 题目 2. 解题 2.1 暴力解 2.2 动态规划 1. 题目 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n>=3n >= ...

  3. LeetCode 873. 最长的斐波那契子序列的长度 题目详解

    题目详情 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n >= 3 对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_ ...

  4. LeetCode 873. 最长的斐波那契子序列的长度**(double,need triple)

    具体思想: 比之前见到的最长子序列问题更难: 用常规的vector<unordered_map<int,int>>会爆时间,个人认为可能是随着序列的增加,会导致遍历unorde ...

  5. [Swift]LeetCode873. 最长的斐波那契子序列的长度 | Length of Longest Fibonacci Subsequence...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. leetcode算法题--最长的斐波那契子序列的长度

    原题链接:https://leetcode-cn.com/problems/length-of-longest-fibonacci-subsequence/ 1.set暴力法 对于任一个斐波那契序列来 ...

  7. LeetCode 70. 爬楼梯 (递归斐波那契 | 动态规划)

    70. 爬楼梯 解法1 (暴力递归) 推出递推式子:f(n) = f(n - 1) + f(n - 2) 是一个斐波那契数列,用递归 class Solution {public int climbS ...

  8. 求一个序列中最大的子序列_最大的斐波那契子序列

    求一个序列中最大的子序列 Problem statement: 问题陈述: Given an array with positive number the task to find the large ...

  9. 最长斐波那契数列java实现

    class Solution {public int lenLongestFibSubseq(int[] arr) {//建立一个二维数组来存储每一个以i为结尾元素,j为倒数第二个元素的斐波那契数列的 ...

最新文章

  1. oracle segments,tablespace,and data files
  2. Windows+Git+TortoiseGit+COPSSH安装图文教程 转载
  3. 微信好友特征数据分析及可视化
  4. ASP中 Request.Form中文乱码的解决方法
  5. MFC ListCtrl和IP控件的使用杂记
  6. OpenCV cvLine
  7. java中重载和重写
  8. JSON.parse和JSON.stringify 参数详解
  9. Linux之动态网页---搭建论坛
  10. 整合阿里云视频播放器——Coding在线(十四)
  11. 怎么用python下载网易云_如何使用python批量下载网易云音乐的免费音乐
  12. Linux中指令的前缀命令格式
  13. 什么是Linux内核?它有什么功能?
  14. 计算机本地网络给手机使用吗,手机网络也能共享给电脑(台式or笔记本)使用吗?...
  15. 百度地图车辆运动轨迹
  16. 使用stata临床决策曲线进行外部模型验证
  17. idea导入项目却没有项目结构
  18. 超级简单五子棋小游戏(含代码)
  19. 重磅出台专家计划 华为云由点带面普惠AI
  20. unix sed命令

热门文章

  1. 从事 Android 开发六年,我学到的那些事!
  2. Julia 向 Python 宣战!
  3. .NPT 扩展名格式文件类型及打开方式分析:首次渗入 XR 内容领域
  4. 苹果无人驾驶拿 124 个工程师祭天!
  5. Git曝最危险漏洞,允许攻击者远程执行代码!
  6. 谁在杀死Facebook?谁该为我们负责?
  7. 第 4 章 MybatisPlus 条件构造器
  8. Chrome 打包扩展程序
  9. 第 4 章 Spring
  10. 第 12 章 多路查找树