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

动态规划-子序列问题——376.摆动序列

1.题目解析

题目来源:376.摆动序列——力扣

测试用例

2.算法原理

1.状态表示

以数组第i个位置为例,假设第i个位置为摆动序列的最后一个位置,此时就有两种情况,即最后位置向上摆以及向下摆,所以需要两个表来存储这两种不同的状态

f[i]:以第i个位置为结尾且结尾是上升状态的最长子序列长度

g[i]:以第i个位置为结尾且结尾是下降状态的最长子序列长度

2.状态转移方程

我们一直摆动序列是一上一下的状态,所以在填两个表时需要分别用到对方的前一个位置,即

f[i] = max(g[j]+1,f[i]);g[i]=max(f[j]+1,g[i]);

3.初始化

摆动序列的最小长度为1,那么不妨直接将两个表初始化为全1,这样就不用考虑单个字符成一个序列的情况

4.填表顺序

从左到右,两个表一起填写

5.返回值

返回两个表中的最大值

3.实战代码

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int n = nums.size();vector<int> f(n, 1), g(n, 1);int ret = 1;for (int i = 1; i < n; i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {f[i] = max(g[j] + 1, f[i]);} else if (nums[i] < nums[j]) {g[i] = max(f[j] + 1, g[i]);}}ret = max(ret, max(f[i], g[i]));}return ret;}
};

http://www.mrgr.cn/news/58545.html

相关文章:

  • 机器学习——元学习(Meta-learning)
  • 【Flutter】水波纹扩散动画
  • 质量保障体系(软件测试的方法论)
  • tarjan算法笔记
  • 正则表达式基础知识
  • 数据集yolo关键点模型 -关键点系列- 手部关键点数据集 handpose keypoints >> DataBall
  • 青训营 X 豆包MarsCode 技术训练营--最大矩形面积问题
  • MATLAB锂电概率分布模型
  • 微积分复习笔记 Calculus Volume 1 - 3.7 Derivatives of Inverse Functions
  • 学习webservice的心得
  • TinTin Web3 动态精选:Vitalik 探讨以太坊协议,Solana ETN 开启质押功能
  • Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
  • Openpyxl--学习记录
  • 标准数字隔离器主要特性和应用---腾恩科技
  • 盘点双十一最值得买的好物有哪些?盘点2024双十一超值好物推荐
  • CTF-RE 从0到N: 重新定义ida识别错误的变量
  • Java基础题:搬砖
  • 将接近感应添加到您的下一个嵌入式设计中
  • Kubernetes高可用方案
  • shell编程实例1—猜数字游戏
  • 《中安未来护照阅读器:边检行业的高效利器》
  • springboot小区物业报修管理系统-计算机设计毕业源码03418
  • ECharts系列:图表中显示点,点与点之间不连线
  • LINUX1.5.1(vim编辑器)
  • dinput8.dll文件的用途、常见问题、以及修复dinput8.dll错误的几种方法
  • node.js学习Day1