【学会动态规划】摆动序列(27)

目录

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:376. 摆动序列 - 力扣(LeetCode) 

这道题很好理解,他需要找数字之间的差是一个正数一个负数的交替,

其实我们不用想的这么麻烦,可以把它看成是一个递增递减递增递减交替的一个序列。

然后不要忘记这要找的是子序列,是可以跳着找的。

2. 算法原理

1. 状态表示

dp[ i ] 表示以 i 位置为结尾的所有子序列中,最长的摆动序列的长度。

但是他实际上分为两种情况:

f [ i ] 表示以 i 位置为结尾,最后一个位置呈现 “上升” 趋势的最长摆动序列的长度。

g [ i ] 表示以 i 位置为结尾,最后一个位置呈现 “下降” 趋势的最长摆动序列的长度。

2. 状态转移方程

状态转移方程还是分成两大类:

先从 f [ i ] 开始说起:

f [ i ] 可以自己本身作为一个子序列,长度就是 1

f [ i ] 可以和自己前面的任意一个数一起成为子序列,长度就是 g [ i - 1 ] + 1

这里要注意的是,需要 f [ i - 1 ] < f [ i ]

然后是 g [ i ] :

g [ i ] 可以自己本身作为一个子序列,长度就是 1

g [ i ] 可以和自己前面的任意一个数一起成为子序列,长度就是 f [ i - 1 ] + 1

这里要注意的是,需要 g [ i - 1 ] > g [ i ]

3. 初始化

我们只要都设成 1,就能不用考虑第一种情况。

4. 填表顺序

从左往右。

5. 返回值

返回 f 表 和 g 表中的最大值。

3. 代码编写

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

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…

React项目build打包后,页面空白的解决方案

问题描述&#xff1a; React项目执行 build 命令后&#xff0c;在本地服务器打开页面 是空白的&#xff0c;而且控制台报错 如下图所示 解决方法 打开根目录下的 package.json 文件&#xff0c;添加如下代码 {"name": "testproject","version"…

LAMP 架构及Discuz论坛与Wordpress博客搭建

目录 1 LAMP 配置与应用 1.1动态资源与语言 1.2 LAMP 架构的组成 1.2.1 主要功能 2 编译安装Apache http 服务 2.1 环境准备 2.1.1 关闭防火墙及selinux服务 2.1.2 安装依赖环境 2.2 安装软件包 2.2.1 解压软件包 2.2.2 移动apr包 apr-util包到安装目录中&#xff0c;并…

养号自动化,指纹浏览器和RPA机器人解除烦恼

在这个充满科技魔力的时代&#xff0c;社交媒体已经成为人们生活的一部分&#xff0c;而Facebook更是我们分享欢乐、联络亲友的重要平台。然而&#xff0c;随之而来的是一个棘手的问题&#xff1a;如何保持账号的活跃度&#xff0c;而又不被沉重的养号工作压垮&#xff1f;别担…

Java基础十三(字符串)

1. 结婚 有一个类CAB&#xff0c;有一个canMarry方法&#xff0c;接收两个Person对象&#xff0c;返回boolean值表示两个人能否结婚。 package kfm.bases.string;public class Person {private String name;private Character gender;private Integer age;private Boolean ma…

【数据结构练习】链表面试题锦集一

目录 前言&#xff1a; 1. 删除链表中所有值为key的节点 方法一&#xff1a;正常删除&#xff0c;头结点另外讨论 方法二:虚拟头结点法 方法三&#xff1a;递归 2.反转链表 方法一&#xff1a;双指针迭代 方法二&#xff1a;递归法解析&#xff1a; 3.链表的中间结点 方法…

Fastadmin框架 聚合数字生活抵扣卡系统v2.8.6

【2.8.6更新公告】 1.【优化】优化已知问题。 2.【新增 】新增区县影院。

R语言实现网状Meta分析(1)

#R语言实现网状Meta library(gemtc) help(package"gemtc") data<-gemtc::smoking #注意按照实例格式编写数据 net<-mtc.network(data$data.ab) #网状图 plot(net,mode"circle",displaylabelsT,boxed.labelF) summary(net) #网状model model<-mtc…

NineData中标移动云数据库传输项目(2023)

近日&#xff0c;玖章算术NineData智能数据管理平台成功中标《2023年移动云数据库传输服务软件项目》&#xff0c;中标金额为406万。这标志着玖章算术NineData平台已成功落地顶级运营商行业&#xff0c;并在数据管理方面实现了大规模应用实践。 NineData中标2023移动云数据库传…

Kali 网络参数的配置

手工方式 Wired 有线 Woreless 无线 图形化的网络管理器&#xff08;依赖的服务&#xff1a;NetworkManager&#xff09; ┌──(root㉿kali)-[~] └─# systemctl status NetworkManager ● NetworkManager.service - Network ManagerLoaded: loaded (/lib/systemd/system/N…

JDK 核心jar之 rt.jar

一、JDK目录展示 二、rt.jar 简介 2.1.JAR释义 在软件领域&#xff0c;JAR文件&#xff08;Java归档&#xff0c;英语&#xff1a;Java Archive&#xff09;是一种软件包文件格式&#xff0c;通常用于聚合大量的Java类文件、相关的元数据和资源&#xff08;文本、图片等&…

【深度学习 | 数据可视化】 视觉展示分类边界: Perceptron模型可视化iris数据集的决策边界

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

git开发常用命令

版本回退 soft&#xff1a;git reset --soft HEAD^ 将版本库回退一个版本&#xff0c;且这次提交的所有文件都移动到暂存区 mixed&#xff08;默认&#xff09;&#xff1a;git reset HEAD^ 将版本库回退一个版本&#xff0c;且这次提交的所有文件都移动到工作区&#xff0c;会…

Go framework-GORM

目录 一、GORM 1、GORM连接数据库 2、单表的增删改查 3、结构体名和表名的映射规则 4、gorm.Model匿名字段 5、结构体标签gorm 6、多表操作 7、常用方法 8、支持原生SQL 9、Gin整合GORM 一、GORM ORM&#xff1a;即Object-Relational Mapping&#xff0c;它的作用是在…

Spring源码深度解析三 (MVC)

书接上回 10.MVC 流程&源码剖析 * 问题1&#xff1a;Spring和SpringMVC整合使用时&#xff0c;会创建一个容器还是两个容器&#xff08;父子容器&#xff1f;&#xff09; * 问题2&#xff1a;DispatcherServlet初始化过程中做了什么&#xff1f; * 问题3&#xff1a;请求…

移动硬盘出现两份多个分区并无法使用的情况

文章目录 问题描述解决方案发现问题 问题描述 移动硬盘借给组内同学装Ubuntu之后&#xff0c;出现多个分区&#xff0c;windows10操作系统识别到两个分区并且无法读取&#xff0c;并且出现格式化提醒&#xff0c;但是由于只读属性&#xff0c;而无法格式化的情况。注意这两个分…

c# ??=

空合并运算符 ??&#xff0c;用于定义引用类型和可空类型的默认值。如果此运算符的左操作符不为Null&#xff0c;则此操作符返回左操作数&#xff0c;否则返回右操作数。 例如&#xff1a; //当a不为空时返回a&#xff0c;为null时返回b var c a ?? b;空合并赋值运算符??…

fastdeploy部署多线程/进程paddle ocr(python flask框架 )

部署参考&#xff1a;https://github.com/PaddlePaddle/FastDeploy/blob/develop/tutorials/multi_thread/python/pipeline/README_CN.md 安装 cpu&#xff1a; pip install fastdeploy-python gpu &#xff1a;pip install fastdeploy-gpu-python #下载部署示例代码 git cl…

【Java8特性】——Lambda表达式

一、概述 在Java8 语言中引入的一种新的语法元素和操作符。本质是作为函数式接口的一个实例&#xff0c;依赖于函数式接口。 二、组成 1. Lambda操作符 -> &#xff1a;Lambda操作符或者箭头操作符&#xff0c; 2. Lambda形参列表 左侧&#xff1a; 指定了Lambda表达式…

ElementUI Table 翻页缓存数据

Element UI Table 翻页保存之前的数据,网上找了一些,大部分都是用**:row-key** 和 reserve-selection,但是我觉得有bug,我明明翻页了…但是全选的的个框还是勾着的(可能是使用方法不对,要是有好使的…请cute我一下…感谢) 所以自己写了一个… 思路: 手动勾选的时候,将数据保存…