LeetCode 376. 摆动序列

最长递增子序列

题目链接:

376. 摆动序列

题目描述:

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 **摆动序列 。**第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

  • 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。
  • 相反,[1, 4, 7, 2, 5][1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列最长子序列的长度

题目解析

这道题目理解还是有一点困难的.我们先说一下摆动序列的定义, 下面每一个数字可以理解为两个数的差.

image-20231016211531917

如果我们数组的一个元素减去前面的一个元素构成上面这种一正一负的情况,我们把这个数组称之为摆动序列.

image-20231016211828297

算法原理

我们还是按照我们的一般的经验来解决这个问题

  • 以…为结尾

状态表示

这里我们定义下面的状态

dp[i] : 表示以i位置为结尾的我们的摆动序列的最大的长度

当时我们依照上面的来实现状态转移方程的时候,此时出现两个状态

  • 差值为 正数
  • 差值 为 负数

所以这里是多状态的.

f[i]: 表示以i位置为结尾, 我们差值为正值的摆动序列的最大长度
g[i]: 表示以i位置为结尾, 我们差值为负值的摆动序列的最大长度

状态转移方程

在进行状态转移方程的计算的时候,我们首先要计算我们的差值

1.如果差值是正数1.1 更新 f[i] = g[i-1] + 1 ,这是因为需要和前面的差值是负数打配合1.2 更新 g[i] = g[i-1]     ,g[i] 不需要变换
2.如果差值是负数2.1 更新 g[i] = f[i-1] + 1 , 和正数打配合2.2 更新 f[i] = f[i-1]
3.如果差值是03.1 更新 g[i] = g[i-1]3.2 更新 f[i] = f[i-1]

初始化

这里我们看到题目有一个很重要的说法,他说如果单独一个元素,那么我们也是摆动序列.也就是

f[0] = 1
g[0] = 1

填表顺序

从左向右填,两个表一起走.

返回值

返回我们的两个数组最后的较大值就可以了.注意,有的时候我们返回值拿一个变量保存最大值,有的时候返回我们的最后一个元素,这里我们不做记忆,可以看我们的例子来具体的使用那个.

编写代码

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

image-20231016213511637

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

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

相关文章

ArcGIS笔记8_测量得到的距离单位不是米?一经度一纬度换算为多少米?

本文目录 前言Step 1 遇到测量结果以度为单位的情况Step 2 简单的笨办法转换为以米为单位Step 3 拓展&#xff1a;一经度一纬度换算为多少米 前言 有时我们会遇到这种情况&#xff0c;想在ArcGIS中使用测量工具测量一下某一段距离&#xff0c;但显示的测量结果却是某某度&…

雷电模拟器上使用第一个frida(四)第一个HOOK

经过上述三篇&#xff0c;已经可以使用python3.8.10编写代码&#xff0c;利用frida14.2.18和雷电模拟器9.0.60(9)&#xff0c;Android 9交互。 雷电模拟器上使用第一个frida&#xff08;一&#xff09;之安装-CSDN博客 雷电模拟器上使用第一个frida&#xff08;二&#xff09…

大数据Doris(十一):添加FS_BROKER步骤

文章目录 添加FS_BROKER步骤 一、 ​​​​​​​配置broker节点

机器学习(22)---信息熵、纯度、条件熵、信息增益

文章目录 1、信息熵2、信息增益3、例题分析 1、信息熵 1. 信息熵(information entropy)是度量样本集合纯度最常用的一种指标。信息的混乱程度越大&#xff0c;不确定性越大&#xff0c;信息熵越大&#xff1b;对于纯度&#xff0c;就是信息熵越大&#xff0c;纯度越低。 2. 纯度…

MySQL锁学习笔记

锁 事务的隔离性由锁来实现。 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;比如订单、金额等&#xff09;&#xff0c;我…

论文阅读之【Is GPT-4 a Good Data Analyst?(GPT-4是否是一位好的数据分析师)】

文章目录 论文阅读之【Is GPT-4 a Good Data Analyst?&#xff08;GPT-4是否是一位好的数据分析师&#xff09;】背景&#xff1a;数据分析师工作范围基于GPT-4的端到端数据分析框架将GPT-4作为数据分析师的框架的流程图 实验分析评估指标表1&#xff1a;GPT-4性能表现表2&…

Spring中注入的使用

目录 一、什么是注入&#xff08;Injection&#xff09; 1.1 为什么要注入 二、注入的基本使用 三、Spring注入原理分析 一、什么是注入&#xff08;Injection&#xff09; 注入就是通过Spring的配置文件&#xff0c;为所创建对象的成员变量进行赋值 1.1 为什么要注入 书接上…

Linux:进程控制

目录 一、进程创建 写时拷贝 二、进程终止 echo $? 如何终止进程 _exit与exit 三、进程等待 进程等待的必要性 进程等待的操作 wait waitpid status 异常退出情况 status相关宏 options 四、进程程序替换 1、关于进程程序替换 2、如何进行进程程序替换 程序…

函数防抖(javaScript)

防抖说明 &#xff08;1&#xff09;防抖的目的&#xff1a; 当多次执行某一个动作的时候&#xff0c;限制函数调用的次数&#xff0c;节约资源。 &#xff08;2&#xff09;防抖的概念&#xff1a; 函数防抖&#xff08;debounce&#xff09;&#xff1a;就是指触发事件后&…

Python中图像相似性度量方法汇总

1. 引言 在当前到处充满着图像的世界里&#xff0c;测量和量化图像之间的相似性已经成为一项关键的任务。无论是图像检索、内容推荐还是视觉搜索&#xff0c;图像相似性方法在现代计算机视觉的应用中都发挥着关键的作用。 幸运的是&#xff0c;Python提供了大量的工具和库&am…

想要精通算法和SQL的成长之路 - 分割数组的最大值

想要精通算法和SQL的成长之路 - 分割数组的最大值 前言一. 分割数组的最大值1.1 二分法 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 分割数组的最大值 原题链接 首先面对这个题目&#xff0c;我们可以捕获几个关键词&#xff1a; 非负整数。非空连续子数组。 那么我…

BIM轻量化技术简介

BIM轻量化技术是指在工程建筑的BIM模型建立之后&#xff08;利用专业的BIM建模软件&#xff0c;比如Autodesk Revit, Bentley MicroStation, DS Catia等&#xff09;&#xff0c;通过对BIM模型的压缩处理等技术手段&#xff0c;让BIM可以在各类WEB浏览器、移动App上被使用的技术…

【RTOS学习】优先级 | Tick | 任务状态 | 空闲任务 | 任务调度

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 优先级 | Tick | 任务状态 | 空闲任务 | 任务调度 &#x1f3c0;优先级⚽任务管理 &#x1f3c0;T…

LockSupport-park和unpark编码实战

package com.nanjing.gulimall.zhouyimo.test;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.LockSupport;/*** author zhou* version 1.0* date 2023/10/16 9:11 下午*/ public class LockSupportDemo {public static void main(String[] args) {…

软考高项第四版教材整合管理(第8章)重点内容

序&#xff1a;距离2023下半年软考还有18天&#xff0c;来不及看书的小伙伴看过来啦&#xff0c;一起过一下重点&#xff0c;开始之前&#xff0c;建议大家将下面的过程组矩阵图熟记&#xff01;&#xff01;&#xff01; 第8章 项目整合管理 项目整合管理包括识别、定义、组…

node教程

文章目录 1.node入门 1.node入门 node是什么&#xff1f; node.js是一个开源的&#xff0c;跨平台的JS运行环境&#xff08;其实可以理解为是一款应用程序&#xff0c;是一款软件&#xff0c;可以运行JS&#xff09; node作用&#xff1a; 1.开发服务器应用

【LeetCode热题100】--169.多数元素

169.多数元素 使用哈希表&#xff1a; class Solution {public int majorityElement(int[] nums) {int n nums.length;int m n/2;Map<Integer,Integer> map new HashMap<>(); //定义一个hashfor(int num:nums){Integer count map.get(num); //Map.get() 方法…

8、docker 安装 nginx

1、下载镜像 docker pull nginx 2、本机创建目录 1&#xff09;创建nginx挂载目录 mkdir /usr/local/nginx 2&#xff09;进入nginx目录 cd /usr/local/nginx 3&#xff09;创建 www和logs目录 mkdir -p www logs 3、创建nginx容器 此容器用于复制配置文件&#xff0c;复…

[Spring] SpringMVC 简介(三)

目录 九、SpringMVC 中的 AJAX 请求 1、简单示例 2、RequestBody&#xff08;重点关注“赋值形式”&#xff09; 3、ResponseBody&#xff08;经常用&#xff09; 4、为什么不用手动接收 JSON 字符串、转换 JSON 字符串 5、RestController 十、文件上传与下载 1、Respo…

将中文名格式化输出为英文名

要求&#xff1a; 编写Java程序&#xff0c;输入样式为&#xff1a;Zhong wen ming的人名&#xff0c;以 Ming,Zhong.W 的形式打印出来。其中.W是中间单词的首字母&#xff1b;例如输入”Willian Jefferson Clinton“,输出形式为&#xff1a;Clinton,Willian.J public static …