376. 摆动序列

news2024/11/24 19:49:33

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

  • 例如, [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 = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

看几个测试用例明白题意:

这个题可以用动态规划和贪心,我那天写的时候自己发现一个巨简单的思路,看了之前自己抄的题解和网上的题解,讲解的都很麻烦,各种坡度等等

这篇博客就记录下,我的写法

思路就是,用两个变量保存状态,当前状态和前一个状态,,当前差值大于0了,当前状态更新为1,小于0了状态更新为-1,不考虑等于0的情况,题也说了差值是0,不算摆动序列。每次循环结束都将当前状态保存为前一个状态,下一轮循环继续计算新状态。

什么时候更新结果呢?当当前状态不等于前一个状态时就更行,,也就是1不等于-1这种情况。。

那对于差值有0怎么办?前面判断了,差值时是0,状态不会改变,永远都是初始值,,那么只要一直是0,当前状态永远是初始值,,前状态也是初始值,我都初始化成0,那这样 更新结果的if他就永远进不去,,直到循环结束。范围结果就行,

 int wiggleMaxLength(vector<int>& nums) {

        // 记录状态,只有1 -1 0三种
        //差值大于0了,记录1
        //如果数组全是0或者差值是0怎么办?
        //这种情况记录状态的now永远不会改变,pre和now永远都是0
        //不会记录数字的
        //为啥ans要初始化成1?
        //因为我们从第二个数字和前一个的差值开始判断,默认只有一个元素,或者差值全是0的情况这些最后直接都返回ans为1 的结果,,也就不用特殊处理了
        //特殊情况可以写出来 对着代码看一遍就懂了
        int now=0;
        int pre=0;
        int ans=1;
        for(int i=0;i<nums.size();++i)
        {
            if(i>0)
            {
                int tmp=nums[i]-nums[i-1];
                if(tmp>0){
                    now=1;
                }
                else if(tmp<0){
                    now=-1;
                }
                if(now!=pre)
                {
                    ans++;
                }
                pre=now;    
            }
        }
 
        return ans;

    }

 

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

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

相关文章

机器学习 day24(多类分类模型)

多类分类 多类分类问题仍然是分类问题&#xff0c;所以预测y的可能结果是少量的&#xff0c;而不是无穷多个&#xff0c;且对于多类分类它&#xff1e;2 如上图&#xff1a;左侧为二分类&#xff0c;右侧为多分类&#xff0c;可以通过决策边界来划分区域

EasyExcel导出横向动态表头

需求&#xff1a;导出如下所示excel文档&#xff0c;红框内为动态表头 mysql表内数据格式如下图所示&#xff0c;由于某些特殊原因不能横向展示&#xff0c;仅能纵向展示&#xff0c;所以一个vin对应的数据可能有很多此时导出的时候上图所示的样式更便于人员观看。 依赖项 <…

VS多处理器编译提高编译速度

VS多处理器编译提高编译速度 开启多处理器编译能够提升编译速度&#xff0c;特别是当工程巨大时候&#xff0c;编译速度往往很慢&#xff0c;打开多处理器编译效果明显&#xff0c;下面给出设置和对比 开启多处理器编译 关闭多处理器编译

RabbitMQ系列(8)--实现RabbitMQ队列持久化及消息持久化

概念&#xff1a;在上一章文章中我们演示了消费者宕机的情况下消息没有被消费成功后会重新入队&#xff0c;然后再被消费&#xff0c;但如何保障RabbitMQ服务停掉的情况下&#xff0c;生产者发过来的消息不会丢失&#xff0c;这时候我们为了消息不会丢失就需要将队列和消息都标…

提高计算能力的五种方法

一旦你投入时间&#xff0c;就会 不舍得 轻易放手。 一开始可能会很浪费时间&#xff0c;但是当你练熟之后&#xff0c;效果显而易见。 二次函数&#xff1a;

php对称加密AES加密解密

AES-128-ECB和AES-256-CBC是两种常见的AES加密模式&#xff0c;它们在加密方式和安全性上有以下区别&#xff1a; 加密方式&#xff1a; AES-128-ECB&#xff1a;ECB&#xff08;Electronic Codebook&#xff09;模式是最简单的AES加密模式&#xff0c;它将数据分成固定大小的…

CSS 自定义提示(重写 title 属性)

前言 CSS 原生 title 属性太丑&#xff0c;需要重写 效果 改造 HTML 代码第2行&#xff0c;tip-label 自定义属性 <div class"tools"><div class"btn tip" v-for"item of list" :key"item.icon" :tip-label"item.l…

允许Traceroute探测漏洞和ICMP timestamp请求响应漏洞解决方法

目录 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 2、ICMP timestamp请求响应漏洞 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 详细描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来…

Sentinel持久化实战

前言 Sentinel有pull&#xff08;拉&#xff09;模式&#xff0c;和push&#xff08;推&#xff09;模式。本文是使用reids实现pull模式。 通过SPI机制引入自己的类 在项目的 resources > META-INF > services下创建新文件&#xff0c;文件名如下&#xff0c;内容是自…

centos7系统一键离线安装docker

离线安装脚本 # 离线安装docker rpm -Uvh --force --nodeps *.rpm # 启动docker systemctl start docker sudo systemctl daemon-reload # 设置开机自动启动docker systemctl enable docker.service下载 程序包下载地址 https://gitcode.net/zenglg/centos7_docker_offline_…

泛微E9鉴权

调用OA鉴权接口的过程 认证流程时序图 第一步、注册许可 请求地址&#xff1a; ​ http://泛微服务地址/api/ec/dev/auth/regist 请求方式&#xff1a;post 请求头部参数&#xff08;request headers&#xff09;&#xff1a; 参数名必选类型说明appid是string许可证号码…

前端学习——jsDay4

函数 函数使用 小练习 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

【算法与数据结构】232、LeetCode用栈实现队列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题要求我们用栈模拟队列&#xff08;工作上一定没人这么搞&#xff09;。程序当中&#xff0c;pus…

【cuda】cuda-12.0对应tensorflow-gpu安装

我的cuda是12.0的&#xff0c;先根据下面的链接装了cudnn (12条消息) Windows10系统CUDA和CUDNN安装教程_windows安装cudnn_流泪&#xff06;枯萎的博客-CSDN博客 (12条消息) 【精简】2023年最新Windows安装GPU版本的tensorflow&#xff08;含bug记录及解决&#xff09;_tenso…

js引入json文件

引入json文件有多种方法&#xff0c;这里记录一种方法&#xff1a; 1、有json文件 文件内容 2、上传到服务器获得url&#xff08;也可以不上传&#xff09; 获取url:“https://asc-test1.oss-cn-beijing.aliyuncs.com/2023/07/05/b1917481d4eb40628bc6d10113896d82taizhou.jso…

玩机搞机---小米刷机工具平台刷写报错对症解决方法

安卓玩机搞机技巧综合资源-----全安卓机型通用线刷 卡刷教程。新老机型可参考【十八】 小米刷机平台工具版本较多。有时候更换工具版本刷机会有不同的提示。虽然目前很多第三方包都采用脚本方式刷写&#xff0c;但我们具体要了解使用官方工具报错究竟是什么原因。常见的报错有…

Ae 效果:CC Vignette

风格化/CC Vignette Stylize/CC Vignette CC Vignette&#xff08;CC 暗角&#xff09;效果可以用于各种场景&#xff0c;例如添加电影感、突出焦点、调整色调或增加视觉吸引力。使用 CC Vignette&#xff0c;可以轻松地为图像或视频创建独特的暗角效果&#xff0c;使其更具艺术…

【Git原理与使用】-- 标签管理

目录 理解标签 创建标签 操作标签 删除 推送 理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff1a;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识里程碑…

C++初阶之类和对象(下)

类和对象&#xff08;下&#xff09; 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5.匿名对象6.拷贝对象时的一些编译器优化结语 1. 再谈构造函数 1.1 构造函数体赋值 在创建…

AIGC - Stable Diffusion 的 AWPortrait 1.1 模型与 Prompts 设置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131565908 AWPortrait 1.1 网址&#xff1a;https://www.liblibai.com/modelinfo/721fa2d298b262d7c08f0337ebfe58f8 介绍&#xff1a;AWPortrai…