面试算法93:最长斐波那契数列

题目

输入一个没有重复数字的单调递增的数组,数组中至少有3个数字,请问数组中最长的斐波那契数列的长度是多少?例如,如果输入的数组是[1,2,3,4,5,6,7,8],由于其中最长的斐波那契数列是1、2、3、5、8,因此输出是5。

分析

由于状态转移方程有两个参数i和j,因此需要一个二维数组来缓存f(i,j)的计算结果。i对应二维数组的行号,j对应二维数组的列号。由于i大于j,因此实际上只用到了二维数组的左下角部分。如果数组的长度是n,那么i的取值范围为1~n-1,而j的取值范围为0~n-2。
在这里插入图片描述
表14.4中第2行第1个格子表示以A[2]为结尾、A[0]为倒数第2个数字的数列1、3,此时还不是一个有效的斐波那契数列,它的长度是2,即f(2,0)等于2。第2行第2个格子表示以A[2]为结尾、A[1]为倒数第2个数字的斐波那契数列的长度。存在一个数字A[0]使A[2]=A[1]+A[0](即3=2+1),因此f(2,1)=f(1,0)+1,f(2,1)等于3,对应的斐波那契数列是1、2、3。

public class Test {public static void main(String[] args) {int[] A = {1, 2, 3, 4, 5, 6, 7, 8};int result = lenLongestFibSubseq(A);System.out.println(result);}public static int lenLongestFibSubseq(int[] A) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < A.length; i++) {map.put(A[i], i);}int[][] dp = new int[A.length][A.length];int result = 2;for (int i = 1; i < A.length; i++) {for (int j = 0; j < i; j++) {int k = map.getOrDefault(A[i] - A[j], -1);dp[i][j] = k >= 0 && k < j ? dp[j][k] + 1 : 2;result = Math.max(result, dp[i][j]);}}return result > 2 ? result : 0;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了5个月,技术明显退步了...

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年12月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

周鸿祎分享大模型十大趋势:2024将出现杀手级应用

1月5日&#xff0c;“2023年风马牛年终秀”上&#xff0c;三六零&#xff08;601360.SH&#xff0c;下称“360”&#xff09;集团创始人周鸿祎分享了对2024年大模型发展趋势的十大预测&#xff0c;呼吁企业树立AI信仰&#xff0c;All in AI。他认为&#xff0c;创新才能破局&am…

ctfshow——信息搜集

文章目录 web 1web 2web 3web 4web 5web 6web 7web 8web 9web 10web 11web 12web 13web 14web 15web 16web 17web 18web 19web 20 web 1 题目提示开发注释未及时删除。 直接右键查看源代码。 web 2 在这关我们会发现&#xff1a;1&#xff09;无法使用右键查看源代码&…

Linux服务器的几种类型

Linux是一个开源操作系统内核&#xff0c;用作各种Linux发行版&#xff08;也称为“distros”&#xff09;的核心组件。由Linus Torvalds于1991年开发&#xff0c;Linux基于Unix操作系统。它以其稳定性、安全性和多功能性而闻名。 Linux的关键特点&#xff1a; 开源性质&#…

OpenCASCADE MFC例子

OpenCASCADE MFC例子 说明 一直对OpenCASCADE一直都比较感兴趣&#xff0c;这个例子是我参考这位大神C幼儿园中班小朋友的专栏做出来的OpenCASCADE_C幼儿园中班小朋友的博客-CSDN博客 不过我用的是vcpkg的方式安装OpenCASCADE&#xff0c;这个需要注意一下&#xff0c;可能需…

[蓝桥杯学习] 树链剖分

定义 将树分割成若干条链&#xff0c;以维护树上的信息&#xff0c;若无特殊需求&#xff0c;一般是重链剖分。 重链剖分 如何重链剖分 两个dfs 第一个dfs是预处理各个结点的基本信息&#xff0c;第二个dfs是利用信息进行剖分&#xff08;dfs序&#xff09; 操作步骤 第一…

git在本地创建dev分支并和远程的dev分支关联起来

文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…

构建高效秒杀系统的设计原理及注意事项

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

设计模式——迭代器模式(Iterator Pattern)

概述 迭代器模式(Iterator Pattern)&#xff1a;提供一种方法来访问聚合对象&#xff0c;而不用暴露这个对象的内部表示&#xff0c;其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 在软件开发中&#xff0c;我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有…

UG装配-沿线运动

如果希望图中圆柱销沿着槽运动&#xff0c;直接约束面是困难的&#xff0c;我们可以画出圆弧的中心线和圆柱销的中心点&#xff0c;约束点在线上&#xff0c;进行移动 需要注意的是&#xff0c;我们在零件中画点和线的时候&#xff0c;在装配体默认加载模型引用集的时候是无法显…

最新ChatGPT网站源码,支持Midjourney绘画,GPT语音对话+GPT-4识图理解能力+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

基于 ESP32-C3 开启 Flash 加密和安全启动并进行 OTA 测试

软件&#xff1a; esp-idf v5.1.2 硬件&#xff1a; ESP32-C3 board 1. 首先&#xff0c;准备一个明文固件 hello-world.bin 基于 esp-idf-v5.1.2\examples\get-started\hello_world 例程&#xff0c;使用如下指令&#xff0c;直接编译&#xff0c;获取明文固件 hello-worl…

IDEA中自动导包及快捷键

导包设置及快捷键 设置&#xff1a;Setting->Editor->General->Auto import快捷键 设置&#xff1a;Setting->Editor->General->Auto import java区域有两个关键选项 Add unambiguous imports on the fly 快速添加明确的导包 IDEA将在我们书写代码的时候…

wpsjs学习——获取单元格批注

1.获取第一个单元格的值&#xff1a; wps.Application.ActiveSheet.Range(A1).Value2; 2.1.获取第一个单元格的批注&#xff1a; wps.Application.ActiveSheet.Range(A1).Comment.Text(); <div class"global">获取表格信息<div class"divItem">…

厚积薄发11年,鸿蒙究竟有多可怕

​12月20日中国工程院等权威单位发布《2023年全球十大工程成就》。本次发布的2023全球十大工程成就包括“鸿蒙操作系统”在内。入围的“全球十大工程成就”&#xff0c;主要指过去五年由世界各国工程科技工作者合作或单独完成且实践验证有效的&#xff0c;并且已经产生全球影响…

Zernike多项式法生成相位理论推导及图像引导实现原理

目录 引言 波前传感器 ​编辑 关于相位计算问题补充 关于结构图的修正 光束质量评价指标 Zernike多项式 ​编辑Zernike多项式法生成相位 光强分布求波前相位-GS 更快的迭代方法SPGD 基于Zernike模式的SPGD 引言 我们还是先从第一篇文献开始理解展开今天分享的一些重…

并查集(C++)

目录 一、并查集的原理二、并查集的实现路径压缩 三、并查集的应用结尾 一、并查集的原理 并查集的两个功能&#xff1a; 合并&#xff1a;合并两个不想联系的元素查询&#xff1a;判断两个元素是否在同一个组内 主要解决的是元素分组的问题。 例如&#xff1a;某班级要创建…

数据迁移怎么测,都有哪些步骤?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

gRPC - 分布式 gRPC 四种通信方式、三种代理方式(全代码演示)

目录 一、分布式 gRPC 开发 1.1、项目结构 & 前置说明 1.1.1、项目结构 1.1.2、protoc 必备依赖 1.1.3、推荐插件&#xff08;简化开发&#xff09; 1.1.4、protoc 生成 Java 代码说明 1.2、一元 RPC&#xff08;代理方式一&#xff1a;阻塞式 BlockingStub&#xff…

DFA算法在敏感词过滤的应用

相信大家对于游戏里聊天框的以下内容已经不陌生了 "我***"“你真牛*”“你是不是傻*” 一个垃圾的游戏环境是非常影响玩游戏的心情的&#xff0c;看到这些&#xff0c;就知道游戏已经帮我们屏蔽掉了那些屏蔽字了&#xff0c;对于玩游戏而言&#xff0c;心里会好受很…