16 暴力求解解最长的斐波那契子序列长度

如果序列x1、x2、x3,...xn满足以下条件,就说他是斐波那契式
n>=3
对于所有i+2<n,都有xi+xi+1=xi+2

题目描述:给定一个严格递增的正整数组成的序列A,找到A中最长的斐波那契数列的子序列的长度,如果一个不存在则返回0;

提示:子序列是从原序列A中派生出来的,它从A中删除任意数量的元素(也可以不删,而不改变其余元素的顺序,例如[3,5,8]是[3,4,5,6,7,8]的一个子序列)

暴力求解:三个循环,第一个循环代表斐波那契第一个元素,第二个循环代表斐波那契数列的第二个元素,第三个循环是确定了前两个元素后,不停向后寻找斐波那契数列;

public int getMaxLength(int []nums)
{
int maxLength=Interger.MIN_VALUE;
//外层循环确定斐波那契数列第一个值
for(int i=0;i<nums.length;i++)
{
//内层循环确定斐波那契数列第二个值
for(int j=i+1;j<nums.length;j++)
{
//记录下第一个和第二个值
int num1=nums[i];
int num2=nums[2];
int number=2;
//不停寻找
for(int k=j+1;j<nums.length;k++)
{
if(num[k]==num1+num2)
{
number++;
num1=num2;
num2=num[k];
}
}
if(number>2)
{
maxLength=Math.max(maxLength,nuber);
}
}
}
​​​​​​​return maxLength;
}

动态规划求解:暴力求解是从前往后找,动态规划可以由后面往前找,即先确定最后两个元素,后向前寻找前面那个元素dp[i][j]表示以i和j结尾的斐波那契数列的个数,注意ij是斐波那契数列最后两个元素。

public getMaxLength2(int []nums)
{
int maxLength=Interger.MIN_VALUE;;
int dp[][]=new int[nums.length][nums.length];
dp[0][1]=2;
for(int i=1;i<nums.length;i++)
{
for(int j=i-1;j>0;j--)
{
for(int k=j-1;k>0;k--)
{
if((nums[i]-nums[j])==nums[k])
{
dp[j][i]=dp[k][j]+1;
}else if(nums[k]+nums[j]<nums[i])
{
break;
}
}
maxLength=Math.max(maxLength,dp[i][j]);
}
}
}

动态规划优化:以上在确定动态数组最后两个元素的情况下,需要往前走,可以使用一个Map进行存储nums[i]和i,从而直接通过map.getOrDefault(nums[j]-nums[i],-1)获取index,若不返回0则存在

public int getMaxLength(int []nums)
{
int dp[][]=new int[nums.length][nums.length];
dp[0][1]=2;
Map<Integer,Integer>map=new HashMap<>();
map.put(nums[0],0);
int maxLength=Math.MIN_VALUE;
for(int i=1;i<nums.length;i++)
{
map.put(nums[i],i);
for(int j=i-1;j>0;j--)
{
int k=map.getOrDefault(nums[i]-nums[j],-1);
if(k!=-1)
{
dp[j][i]=dp[k][j]+1;
maxLength=Math.max(maxLength,dp[j][i]);
}else
{
continue;
}
}
}
return maxLength;
}

知识点总结:定义map:Map<Integer,Integer>map=new HashMap<>();向map中放入元素map.put(number,i);获取number的值,map.getOrDefault(number,-1),若返回不为0则存在

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

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

相关文章

java中的方法引用和Stream流

知识模块&#xff1a; 一.方法引用a.方法概述b.方法引用格式 二.Stream流1.Stream流概述2.Stream流操作步骤一.方法引用a.方法概述/*方法引用概述&#xff1a;当我们使用已有类中的方法作为Lambda表达式对应的接口中的抽象方法实现我们可以用方法引用来简化Lambda表达式*/impor…

商业5.0:数字化时代的商业变革

随着数字化技术的迅速发展和应用&#xff0c;商业领域正在经历前所未有的变革。商业5.0&#xff0c;作为数字化时代的新概念&#xff0c;旨在探讨商业模式的创新和演变&#xff0c;从1.0到5.0&#xff0c;商业领域经历了从传统到数字化的转变。 一、商业1.0&#xff1a;传统商…

力扣 144.二叉树的前序遍历

目录 1.解题思路2.代码实现2.1获得节点数接口:2.2递归接口:2.3最终实现 1.解题思路 该题要利用前序遍历&#xff0c;将树的值存到数组中&#xff0c;所以在申请空间的时候&#xff0c;我们需要知道要申请多少空间&#xff0c;也就是要知道树到底有多少个结点&#xff0c;因此第…

MATLAB算法实战应用案例精讲-【图像处理】图像识别(补充篇)

目录 知识储备 图像处理中使用到的机器学习方法 监督与无监督学习 无监督机器学习

第十二章 git

Python基础、函数、模块、面向对象、网络和并发编程、数据库和缓存、 前端、django、Flask、tornado、api、git、爬虫、算法和数据结构、Linux、设计题、客观题、其他 第十二章 git 1. 你在公司如何做的协同开发&#xff1f; 在公司进行协同开发时&#xff0c;有效的协作和团…

小航助学题库蓝桥杯题库c++选拔赛(22年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

PHP:js中怎么使用PHP变量,php变量为数组时的处理

方法一&#xff1a;使用内嵌 PHP 脚本标记 1、简单的拼接 使用内嵌的 PHP 脚本标记 <?php ?> 将 PHP 变量 $phpVariable 的值嵌入到 JavaScript 代码中。 <?php $phpVariable "Hello, World!"; ?><script> // 将 PHP 变量的值传递给 JavaS…

ArcGIS制作某村土地利用现状图

1. 根据坐落单位名称属性选择并提取作图数据 (1) 将“作图线状地物”、“作图图班”和“村庄”图层加入ARCGIS&#xff08;右键Layers-Add data&#xff09;&#xff0c;选择相应路径下的文件加载即可。 (2) 按属性来提取作图村庄的地类图班、线状地物和村界文件&#xff08;…

C++初阶(十三)vector

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、vector的介绍二、vector的模拟实现1、模拟实现2、测试结果 一、vector的介绍 vector的文…

并发编程

线程与进程 线程就是一个指令流&#xff0c;将一条条指令以一定的顺序交给CPU运行&#xff0c;是操作系统进行运算调度的最小单位进程是正在运行程序的实例&#xff0c;进程包含了线程不同进程使用不同的内存空间&#xff0c;在当前进程下的所有线程可以共享内存空间。 并发与…

【数据结构】- 详解线索二叉树(C 语言实现)

目录 一、线索二叉树的基本概念 二、构造线索二叉树 三、遍历线索二叉树 一、线索二叉树的基本概念 遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列&#xff0c;得到二叉树中结点的先序序列、中序序列或后序序列。这实质上是对一个非线性结构进行线性化操作&am…

深度学习毕设项目 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

SIFI 极值点拟合的详细推导过程

在获得高斯差分金字塔之后&#xff0c;我们可以根据邻近尺度和邻近像素一共 26 个像素点的灰度值和中心像素点的灰度值比较&#xff0c;如果中心像素点的值是最大或者最小的&#xff0c;则作为极值点保留下来。 但是我们知道像素是网格排布的&#xff0c;也就是说是离散的&…

PHP微信UI在线聊天系统源码 客服私有即时通讯系统 附安装教程

DuckChat是一套完整的私有即时通讯解决方案&#xff0c;包含服务器端程序和各种客户端程序&#xff08;包括iOS、Android、PC等&#xff09;。通过DuckChat&#xff0c;站点管理员可以快速在自己的服务器上建立私有的即时通讯服务&#xff0c;用户可以使用客户端连接至此服务器…

LeetCode(42)有效的字母异位词【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 有效的字母异位词 1.题目 给定两个字符串 *s* 和 *t* &#xff0c;编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意&#xff1a;**若 *s* 和 *t* 中每个字符出现的次数都相同&#xff0c;则称 *s* 和 *t* 互为字…

设计模式 【Adapter 模式】

Adapter 模式 1.什么是 Adapter 模式 用来填补现有的程序和所需的程序之间差异的设计模式就是 Adapter 模式。 Adapter 模式有两种&#xff1a; ● 类适配器模式&#xff0c;即使用继承的适配器 ● 对象适配器模式&#xff0c;即使用委托的适配器 2.使用继承的适配器示例…

TZOJ 1367 计算两点间的距离

答案&#xff1a; #include <stdio.h> #include<math.h> //引用数学的库函数 int main() {double x1 0.0, y1 0.0, x2 0.0, y2 0.0; //由于输入的是实数&#xff0c;实数包括小数&#xff0c;所以不能 用int类型&#xff0c;只能用double类型while (sc…

Vue性能优化方法

一、前言 1.1 为什么需要性能优化 用户体验&#xff1a;优化性能可以提升用户体验&#xff0c;降低加载时间和响应时间&#xff0c;让用户更快地看到页面内容。SEO优化&#xff1a;搜索引擎更喜欢快速响应的网站&#xff0c;优化性能可以提高网站的排名。节约成本&#xff1…

ubuntu16.04部署gitlab-runner触发gitlab流水线

环境&#xff1a;ubuntu16.04 gitlab服务器&#xff1a;192.168.1.12 runner服务器&#xff1a;192.168.1.11 1.下载 环境&#xff1a;192.168.1.11 cd /usr/local/srcwget https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.debsudo dpkg …

Pandas进阶:20个实用的Pandas函数的基本使用

1. ExcelWriter 很多时候dataframe里面有中文&#xff0c;如果直接输出到csv里&#xff0c;中文将显示乱码。而Excel就不一样了&#xff0c;ExcelWriter是pandas的一个类&#xff0c;可以使dataframe数据框直接输出到excel文件&#xff0c;并可以指定sheets名称。 df1 pd.Da…