LeetCode:376.摆动序列

news2024/11/20 3:23:34

个人主页:仍有未知等待探索-CSDN博客

专题分栏:算法_仍有未知等待探索的博客-CSDN博客

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

一、题目

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

  • 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

  • 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

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

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

示例 1:

输入:nums = [1,7,4,9,2,5]
输出:6
解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3) 。

示例 2:

输入:nums = [1,17,5,10,13,15,10,5,16,8]
输出:7
解释:这个序列包含几个长度为 7 摆动序列。
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8) 。

示例 3:

输入:nums = [1,2,3,4,5,6,7,8,9]
输出:2

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000

二、理解

我们要求摆动序列的最大子序列(可以进行删除操作,创造子序列)

我们只需要记录每段是上升的还是下降的,然后如果连续的两个序列不同的话,就进行记录。

(还有一种用峰值来判断的方法比较繁琐)

三、代码

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int ans = 0;// 用来记录答案
        int f = 0;// 标记位, 用来标记上一个状态,是升序还是降序
        // 从第二个数开始进行,因为第一个数总是会加到答案里面去
        for (int i = 1; i < nums.size(); i ++ )
        {
            // 该序列是升序,但是上一个序列不能为升序
            if (nums[i - 1] < nums[i] && f != 1)
            {
                ans ++;
                f = 1;// 升序
            }
            else if (nums[i - 1] > nums[i] && f != 2)
            {
                ans ++;
                f = 2;// 降序
            }
        }
        // 把第一个数进行包含
        return ans + 1;
    }
};

谢谢大家!

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

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

相关文章

【排序5】基数排序:数字的组织与整理艺术

&#x1f3a1;基数排序 &#x1f38a;1、基本思想&#x1f38a;2、基本步骤&#x1f38a;3、代码示例&#x1f38a;4、特性总结 &#x1f38a;1、基本思想 基数排序&#xff08;Radix Sort&#xff09;是一种非比较排序算法&#xff0c;它根据数字的每一位来对元素进行排序。它…

提示unzip :commad not found; 安装unzip教程

1.当使用unzip解压时 提示&#xff1a; unzip :commad not found; 2.安装命令 sudo yum install unzip 3.输入 y 确认 4.提示&#xff1a;完成 5.输入 unzip 文件名 解压-验证 6.完成

34.基于51单片机的智能停车位计时收费系统设计

一、系统功能介绍&#xff1a; 本设计基于 RFID智能识别和高速的视频图像和存储比较相结合&#xff0c;通过计算机的图像处理和自动识别&#xff0c;对车辆进出停车场的收费、车牌识别和车位诱导等&#xff0c;以实现停车场全方位智能管理。 本设计是以AT89C51 型单片机为主控芯…

Kubernetes (十七) 资源监控

一. 资源监控 二. metrics-server资源下载配置 官网:资源下载&#xff1a;http…

搭建Mybatis环境

1.导入依赖 pom.xml <dependencies> <!-- Mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency> <!-- Mysql依…

Tonka Finance 测试网活动,开启新铭文时代财富之门

Tonka Finance 是铭文赛道首个借贷市场&#xff0c;通过搭建一套铭文资产借贷质押方案&#xff0c;为铭文资产以借贷的形式释放价值、捕获流动性等方面提供了基础。作为铭文赛道最重要的基建设施之一&#xff0c;Tonka Finance 在面向市场后备受关注&#xff0c;并迅速作为铭文…

【UE】在控件蓝图中通过时间轴控制材质参数变化

效果 步骤 1. 新建一个控件蓝图和一个材质 2. 打开材质&#xff0c;设置材质域为用户界面&#xff0c;混合模式设置为“半透明” 在材质图表中添加两个参数来控制材质的颜色和不透明度 3. 对材质创建材质实例 4. 打开控件蓝图&#xff0c;在画布面板中添加一个图像控件 将刚…

vue常用指令(v-html)

一、v-html 指令 作用: 获取文本数据设置元素的innerHTML&#xff0c;此为和v-text的区别 二、代码演示 1、获取普通文本数据 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpor…

32个Java面试必考点-08高并发架构基石-缓存

本课时介绍缓存相关的知识点以及 Memcache 和 Redis 这两个最常使用的缓存。重点学习以下三个方面的内容&#xff1a; 1.使用缓存时常遇到的典型问题&#xff1b; 2.Memcache 的内存结构&#xff1b; 3.Redis 相关的知识点以及 Redis 常用结构的实现。 缓存知识点 类型 缓…

day34WEB 攻防-通用漏洞文件上传黑白盒审计逻辑中间件外部引用

目录 一&#xff0c;白盒审计-Finecms-代码常规-处理逻辑 黑盒思路&#xff1a;寻找上传点抓包修改突破获取状态码及地址 审计流程&#xff1a;功能点-代码文件-代码块-抓包调试-验证测试 二&#xff0c;白盒审计-CuppaCms-中间件-.htaccess 三&#xff0c;白盒审计-Metin…

XCTF:Normal_RSA[WriteUP]

从题目中获取到两个文件 flag.enc内容是通过rsa加密了的密文 pubkey.pem是rsa公钥&#xff0c;加密者利用这个文件对flag原文进行了加密 如果对rsa加密算法不了解的可以补一下教学视频 数学不好也能听懂的算法 - RSA加密和解密原理和过程_哔哩哔哩_bilibili 使用openssl对公…

使用dockers-compose搭建开源监控和可视化工具

简介 Prometheus 和 Grafana 是两个常用的开源监控和可视化工具。 Prometheus 是一个用于存储和查询时间序列数据的系统。它提供了用于监控和报警的数据收集、存储、查询和图形化展示能力。Prometheus 使用拉模型&#xff08;pull model&#xff09;&#xff0c;通过 HTTP 协议…

二、mongoose的使用,实现用户集合的操作

前言 mongodb&#xff1a;为了在node应用中与MongoDB交互&#xff0c;开发者需要使用MongoDB的驱动程序&#xff0c;所以安装的mongodb就是其驱动程序&#xff1b; mongoose: 是一个用于 MongoDB 的对象建模工具&#xff0c;提供了一个丰富的查询语言和许多其他功能&#xff0c…

pytest教程-7-用例前后置方法

上一小节&#xff0c;我们学习了pytest跳过测试用例的方法&#xff0c;本小节我们讲解一下pytest用例的前后置方法。 在unittest中就有前置setup和后置teardown来处理测试用例执行前的准备工作&#xff08;浏览器驱动实例化&#xff0c;数据库连接等&#xff09;以及执行后的处…

数据结构之位图与布隆过滤器

数据结构之位图与布隆过滤器 文章目录 数据结构之位图与布隆过滤器一、位图1、位图概念2、位图的实现3、位图的应用 二、布隆过滤器1、布隆过滤器的提出2、布隆过滤器概念3、布隆过滤器的插入4、布隆过滤器的查找5、布隆过滤器删除6、布隆过滤器优点7、布隆过滤器缺陷8、布隆过…

Vulnhub-dc6

信息收集 # nmap -sn 192.168.1.0/24 -oN live.port Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-25 14:39 CST Nmap scan report for 192.168.1.1 Host is up (0.00075s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.1.2…

总结红包雨项目的所有代码,包括添加图片,分享按钮,红包雨,用户是否有抽奖逻辑判断

整体实现效果: 需要用的图片: html: <body><div id"app"><!-- <div class"share-box"><img src"./share_box.png" alt"share-button"></div> --><!-- img图片 --><div class"gif-…

必应聊天在当前安全搜索设置下不可用

使用Bing必应搜索引擎&#xff0c;想用必应AI聊天功能会提示&#xff1a;必应聊天在当前安全搜索设置下不可用。 当安全搜索设置设置为“严格”时&#xff0c;不支持必应聊天。 那么怎么修改安全搜索设置呢&#xff1f; 点击右上角的菜单图标&#xff0c;在下拉菜单里点击安全…

【Qt】跨平台UI布局,以Windows + Android安卓为例

文章目录 使用Qt Designer直接拖放Label结合Horizontal Layout Horizontal Spacer 使用纯代码如何改用纯代码方式布局为不同平台设置不同文字 Qt适合跨平台开发&#xff0c;但跨平台时如何实现UI布局这种基础只是都鲜有人提及。当然也有可能是太基础&#xff0c;大家觉得没有提…

移动Web——平面转换-多重转换

1、平面转换-多重转换 多重转换技巧&#xff1a;先平移再旋转 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&qu…