当前位置: 首页 > news >正文

做外文H网站此网站三天换一次域名

做外文H网站,此网站三天换一次域名,上海网站设计开发,企业网站seo策略目录 力扣873. 最长的斐波那契子序列的长度 解析代码 力扣873. 最长的斐波那契子序列的长度 873. 最长的斐波那契子序列的长度 难度 中等 如果序列 X_1, X_2, ..., X_n 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#x…

目录

力扣873. 最长的斐波那契子序列的长度

解析代码


力扣873. 最长的斐波那契子序列的长度

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

难度 中等

如果序列 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] 。

提示:

  • 3 <= arr.length <= 1000
  • 1 <= arr[i] < arr[i + 1] <= 10^9

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

解析代码

动态规划解法思路:

状态表示:以某个位置为结尾,结合题目要求,先定义⼀个状态表示:

dp[i] 表示:以 i 位置元素为结尾的所有子序列中,最长的斐波那契子数列的长度。

        但是这里有⼀个非常致命的问题,那就是我们无法确定 i 结尾的斐波那契序列的样子。这样就会导致我们无法推导状态转移⽅方方程,因此我们定义的状态表示需要能够确定一个斐波那契序列。

        根据斐波那契数列的特性,我们仅需知道序列里面的最后两个元素,就可以确定这个序列的样子。因此,修改状态表示为:

dp[i][j] 表示:以 i 位置以及 j 位置的元素为结尾的所有的子序列中,最长的斐波那契子序列的长度。规定一下 i < j 。

状态转移方程:

设 nums[i] = b, nums[j] = c ,那么这个序列的前一个元素就是 a = c - b 。根据 a 的情况讨论:

  • a 存在,下标为 k ,并且 a < b :此时我们需要以 k 位置以及 i 位置元素为结尾的最长斐波那契子序列的长度,然后再加上 j 位置的元素(+1)即可。于是 dp[i][j] =dp[k][i] + 1 ;
  • a 存在,但是 b < a < c :此时只能有两个元素, dp[i][j] = 2 ;
  • a 不存在:此时依旧只有两个元素, dp[i][j] = 2 ;

综上,状态转移方程分情况讨论即可。

        优化点:我们发现,在状态转移方程中,我们需要确定 a 元素的下标。因此我们可以在 dp 之前,将所有的元素和下标绑定在一起,放到哈希表中。

        初始化:可以将表里面的值都初始化为 2 。

        填表顺序:先固定斐波那契子序列的最后一个数,然后枚举倒数第二个数。

        返回值:因为不知道最终结果以谁为结尾,因此返回 dp 表中的最大值 ret 。但是 ret 可能小于 3 ,小于 3 的话说明不存在。因此需要判断一下。

class Solution {
public:int lenLongestFibSubseq(vector<int>& arr) {int n = arr.size(), ret = 2;unordered_map<int, int> hash(n);for(int i = 0; i < n; ++i){hash[arr[i]] = i;}vector<vector<int>> dp(n, vector<int>(n, 2));// dp[i][j] 表示:以i位置及j位置的元素为结尾的子序列中,最长的斐波那契子序列的长度。i < j for(int j = 2; j < n; ++j) // 斐波那契子数列最后一个位置{for(int i = 1; i < j; ++i) // 斐波那契子数列倒数第二个位置{int a = arr[j] - arr[i];if(a < arr[i] && hash.count(a))dp[i][j] = dp[hash[a]][i] + 1; // hash[a]就是a元素下标ret = max(ret, dp[i][j]); }}return ret < 3 ? 0 : ret;}
};
http://www.khdw.cn/news/29019.html

相关文章:

  • 建个网站有收线上推广平台有哪些
  • 建设学校网站推广方式
  • 周村网站建设百度网址大全手机版
  • 武汉网站排名哪家好什么叫网络市场营销
  • asp mdb制作网站登录二十条优化疫情措施
  • 找一个网站做搜索引擎分析怎么制作网页设计
  • wordpress 角色等级企业关键词排名优化网址
  • 网站服务费做啥费用seo页面内容优化
  • 网站主目录bt磁力搜索
  • 西安建设商城类网站网店怎么运营和推广
  • 建设主题网站的顺序是什么意思上海app网络推广公司
  • 钦州网站建设哪家便宜西安seo哪家好
  • 自己的网站正规培训机构有哪些
  • 做网站金山区网络营销推广微信hyhyk1效果好
  • 怎么用手机做网站平台上海最近三天的新闻
  • 怎么做网盘网站广告开户南京seo
  • wordpress折腾怕了跨境电商seo什么意思
  • 如何做代购网站设计网络推广引流是做什么工作
  • 网站域名被劫持互联网推广的方式
  • wordpress百度插件seo顾问服务深圳
  • 响应式网站建设对企业营销产品推广计划方案
  • 旅游电子商务网站的建设方式营销宣传策划方案
  • 微擎可以做网站吗优化公司结构
  • 云霄城乡建设局网站成都网络推广中联无限
  • 北京高端网站建设公司可以放友情链接的网站
  • 响应式网站和自适应网站宝鸡网站seo
  • 个人网站网站建设五种网络营销推广方法
  • 夫妻网络网站建设阳东网站seo
  • h5 服装网站模板微信小程序开发费用
  • wordpress 城市分类seo行业岗位有哪些