动态规划学习——斐波那契数列

目录

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

1.题目

2.题目接口

3.解题思路及其代码


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

1.题目

如果序列x_1,X_2,...,x_n 满足下列条件,就说它是斐波那契式的:
1.n    >=   3 
2.对于所有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] 。

提示:
arr.length    1000    
1
arr[il<arr[i + 1]<= 10^9

2.题目接口

class Solution {
public:int lenLongestFibSubseq(vector<int>& arr) {}
};

3.解题思路及其代码

这道题我们还是用动态规划的思想来解决。解决步骤如下:

1.状态转移方程:

状态转移方程的定义还是以老套路:以dp[i]位置为结尾表示以i位置为结尾的最长的斐波那契数列。但是我们在这道题里面该用什么表示这个状态转移方程呢?我的解决方法是用二维数组的方式。以dp[i][j]表示以arr[i]和arr[j]为结尾的的子序列的最长长度。那我们的dp[i][j]又该如何推导呢?dp[i][j] = dp[k][i]+1(dp[k][i]表示以arr[k]和arr[i]为结尾的最长的斐波那契数列,加1表示当arr[j]与能作为斐波那契数列的一份子时加上arr[j]这个位置)。

2.初始化:

因为斐波那契数列的长度至少为3。所以我们在初始化dp表时可以先初始化为2.如下:

int n = arr.size();
vector<vector<int>>dp(n,vector<int>(n,2));

然后在返回时做如下判断:

return Maxlenth == 2?0:Maxlenth;

便可以返回最终的正确结果。

3.优化:

这道题如果不进行优化处理,那这道题的时间复杂度将会达到n^3。因为填表时要利用三层循环。但是如果进行如下优化:利用unordered_map将数组元素和下标进行绑定。

 unordered_map<int,int>hash;for(int i = 0;i<n;i++)
{hash[arr[i]] = i;//下标和数组的值进行绑定
}

便可以将时间复杂度降到n^2。

解题代码如下:

class Solution {
public:int lenLongestFibSubseq(vector<int>& arr) {int n = arr.size();vector<vector<int>>dp(n,vector<int>(n,2));unordered_map<int,int>hash;for(int i = 0;i<n;i++){hash[arr[i]] = i;//下标和数组的值进行绑定}int Maxlenth = 2;for(int j = 2;j<n;j++){for(int i = 1;i<n;i++){int num = arr[j] - arr[i];//前面的数的大小if(hash.count(num)&&hash[num]<i)//这里的顺序不能变{dp[i][j] = dp[hash[num]][i]+1;}Maxlenth = max(Maxlenth,dp[i][j]);}}return Maxlenth == 2?0:Maxlenth;}
};

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

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

相关文章

市场风险计量方法

目录 &#xff08;1&#xff09;缺口分析 &#xff08;2&#xff09;久期分析 &#xff08;3&#xff09;外汇敞口 &#xff08;4&#xff09;敏感性分析 &#xff08;5&#xff09;风险价值&#xff08;VaR&#xff09; &#xff08;1&#xff09;缺口分析 衡量利率变动…

Windows安装、配置、启动、卸载Redis

1.下载windows版本Redis&#xff0c;如Redis-x64-5.0.14.zip 2.解压到任意目录&#xff0c;如F:\qc-development\Redis5.0.14 3.&#xff08;非必要&#xff09;修改redis配置文件redis.windows.conf&#xff0c;如修改端口号为6380 # Accept connections on the specified …

error “you should set MAGICKCORE_HDRI_ENABLE

最近做一个项目需要配置ImageMagick库&#xff0c;本项目配置环境如下&#xff1a; ImageMagick version 7 Operating system, version and so on ubuntu 20.04 Description error "you should set MAGICKCORE_HDRI_ENABLE 查阅网上的资料&#xff1a; 默认的是DMAGICKC…

【华为OD题库-041】人气最高的店铺-java

题目 某购物城有m个商铺&#xff0c;现决定举办一场活动选出人气最高店铺。活动共有n位市民参与&#xff0c;每位市民只能投一票&#xff0c;但1号店铺如果给该市民发放q元的购物补贴&#xff0c;该市民会改为投1号店铺。请计算1号店铺需要最少发放多少元购物补贴才能成为人气最…

蓝桥杯双向排序

这里写自定义目录标题 题目分析代码思路 题目分析 n,m都是 1 0 5 10^5 105 &#xff0c;需要将时间复杂度控制在 n log ⁡ n n \log n nlogn以内。 如果有两次连续的前缀操作&#xff0c;由于它们都是降序排列&#xff0c;等价于只做第二次排列&#xff0c;忽略掉第一次。 同…

【MediaTek T830】MediaTek T830介绍

MediaTek T830介绍 千兆级吞吐量 MediaTek T830 平台是一个高集成度的系统单芯片&#xff08;SoC&#xff09;&#xff0c;整合了 4G 和 5G 调制解调器、FR1 射频收发器、GNSS 接收机和电源管理系统。高度集成式设计让 T830 拥有更小的尺寸和更低的功耗。设备制造商可使用…

建筑结构健康监测系统和传统人工监测的区别

在繁华的城市里&#xff0c;建筑结构作为城市生命线的重要一环&#xff0c;其安全与稳定对城市的运转和居民的生活至关重要。为了更好地守护建筑结构的健康&#xff0c;WITBEE万宾自主研发建筑结构健康监测系统让建筑安全&#xff0c;在上一个台阶。 WITBEE万宾建筑结构健康监测…

基于C#实现Dijkstra算法

或许在生活中&#xff0c;经常会碰到针对某一个问题&#xff0c;在众多的限制条件下&#xff0c;如何去寻找一个最优解&#xff1f;可能大家想到了很多诸如“线性规划”&#xff0c;“动态规划”这些经典策略&#xff0c;当然有的问题我们可以用贪心来寻求整体最优解&#xff0…

MySQL数据库:外键、唯一键、唯一索引

目录 说明 一、如果要使用外键&#xff0c;表的存储引擎选择哪个&#xff1f; 1.1 答 1.2 示范 1.2.1 主表 &#xff08;1&#xff09;MyISAM的表&#xff1a;masterTable2 &#xff08;2&#xff09;InnoDB的表&#xff1a;masterTable1 1.2.2 从表 &#xff08;1&am…

人力资源管理后台 === 首页+部署

目录 1.首页-echarts图表的应用 2.首页-echarts图表的按需导入 3.路由模式-将路由改成history模式 4. 打包分析-分析 5.CDN加速 6.项目打包-安装nginx 7.mac/windows环境下nginx部署启动项目 8.nginx解决history的404问题 9.nginx配置代理解决生产环境跨域问题 1.首页-…

【学习草稿】pid控制基础实现--往水桶注水

pid 1&#xff09;非常通俗易懂的PID控制&#xff08;1&#xff09;https://zhuanlan.zhihu.com/p/37515841 球场上运动至指定地点&#xff08;比例控制&#xff09;&#xff1a;有图【很直观的帮助理解】&有文字分析 2&#xff09;初识PID-搞懂PID概念 https://zhuanlan.…

Linux4.6、进程优先级

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 进程优先级是什么&#xff1f; 为什么会有进程优先级&#xff1f; 那么优先级是如何办到的&#xff1f; 最后一个问题&#xff1a;Linux为什么要限制优先级&#xff1f; 进程优先级是什么&#xff1f; 就是进程在访…

2021年06月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题3分,共30分) 第1题 执行下列程序,输出的结果为? A:12 B:24 C:8 D:30 答案:B 第2题 执行下列程序,角色说出的内容是? A:2 B:3 C:4 D:5 答案:A 第3题 执行下列程序,输出结果为?

【Flutter】graphic图表实现自定义tooltip

renderer graphic中tooltip的TooltipGuide类提供了renderer方法,接收三个参数Size类型,Offset类型,Map<int, Tuple>类型。可查到的文档是真的少,所以只能在源码中扒拉例子,做符合需求的修改。 官方github示例 官方示例 这个例子感觉像是tooltip和提供的那些属性的…

2023年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 一、问题求解&#xff1a;真题&#xff08;2023-01&#xff09;真题&#xff08;2023-02&#xff09;真题&#xff08;2023-03&#xff09;真题&#xff08;2023-04&#xff09;真题&#xff08;2023-05&#xff09;真题&#xff08;2023-06&#xff09;真题&#xff…

【密码学】【安全多方计算】浅析隐私求交PSI

文章目录 隐私求交的定义隐私求交方案介绍1. 基于DH的PSI方案2. 基于OT的PSI方案3.基于OPRF的PSI方案 总结 隐私求交的定义 隐私集合求交使得持有数据参与方通过计算得到集合的交集数据&#xff0c;而不泄露任何交集以外的数据信息。 隐私求交方案介绍 1. 基于DH的PSI方案 …

Aapche Dubbo 不安全的 Java 反序列化 (CVE-2019-17564)

漏洞描述 Apache Dubbo 是一个高性能的、基于 Java 的开源 RPC 框架。 Apache Dubbo 支持不同的协议&#xff0c;它的 HTTP 协议处理程序是 Spring Framework 的 .org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter Spring Framework 的安全警告显示&am…

计算机系统漫游

编译系统 预处理&#xff08;Preprocessing&#xff09;&#xff1a; 预处理器根据源代码中的预处理指令&#xff0c;如#include和#define等&#xff0c;将源代码转换为另一份源代码。预处理器的输出通常会保存在hello.i的文件中。编译&#xff08;Compilation&#xff09;&…

为什么要坚持每天做公域引流

做公域不一定等于拍视频&#xff0c;真正适合小白的引流方式其实还是做图文内容&#xff0c;比如小红书发帖&#xff0c;知乎问答&#xff0c;微信读书&#xff0c;问一问等。 长期坚持每天做公域引流有以下好处&#xff1a; 提高品牌知名度&#xff1a;每天坚持做公域流量&a…

nodejs+vue+elementui学生竞赛管理系统65o97

高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生体育 能力与创新思维、学生竟赛管理系统检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而我所在学院多采用半手工管理学生竟赛的方式&#xff0c;所以有必要开发学生竟赛管理系统来对学生…