「贪心算法」摆动序列

力扣原题链接,点击跳转。

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。简单来说,摆动序列的特点是:后一个数交替地比前一个数大或者小。给你一个数组,请找出最长的子数组(保持元素的相对顺序),使得它是一个摆动序列,求这个子数组的长度。

这个问题可以用贪心算法解决。我们把第一个数和最后一个数,再加上所有的极值点(包括极大值点和极小值点)作为摆动序列,这个子数组一定是满足条件的最长子数组,感兴趣的读者可以试着证明这一点。这样,问题就转换为:如何求一个数组极值点的个数?

我们如何判断nums[i]是不是极值呢?一个简单的想法是,如果(nums[i]-nums[i-1])×(nums[i+1]-nums[i])<0,那么nums[i]就是极值。如果这么判断的话,会漏掉一些点。比如,一个序列是1、2、2、2、1,此时2是极大值,但是由于有连续多个相同的值,不能按照前面的方式判断。我们可以换个思路,假设我们把多余的2删掉,把序列变为1、2、1,这样就很好判断了。如何做到这一点呢?我们可以用left保存nums[i]-nums[i-1]的值,如果遇到nums[i+1]=nums[i]的情况,就跳过这个数;如果这个数没有被跳过,再判断左右两边的差是否异号。我在代码中写的是left×right≤0,是为了把第一个数考虑在内。由于还要考虑最后一个数,所以最终结果是cnt+1。

class Solution
{
public:int wiggleMaxLength(vector<int>& nums){int left = 0, cnt = 0, n = nums.size();for (int i = 0; i < n - 1; i++){int right = nums[i + 1] - nums[i];// 不考虑相同的数if (right == 0)continue;// 异号,是极值点if (left * right <= 0)cnt++;left = right;}return cnt + 1;}
};

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

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

相关文章

【iOS开发】—— KVC

【iOS开发】—— KVC 一. KVC的定义key和keyPath的区别用法&#xff1a; 批量复制操作字典模型相互转化KVC的其他方法 KVC原理赋值原理取值原理 一. KVC的定义 KVC&#xff08;Key-value coding&#xff09;键值编码&#xff0c;就是指iOS的开发中&#xff0c;可以允许开发者通…

不用从头训练,通过知识融合创建强大的统一模型

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的开发和训练是一个复杂且成本高昂的过程。数据需求是一个主要问题&#xff0c;因为训练这些模型需要大量的标注数据来保证其准确性和泛化能力&#xff1b;计算资源也是一个…

Java学习路线思维导图

目录 Java学习流程1.学习大纲2.Java开发中常用的DOS命令 Java入门学习思维导图 Java学习流程 通过大纲了解学习的重点&#xff0c;通过目录依次深入【注&#xff1a;Java环境的搭建百度&#xff0c;提升自己百度的能力】 1.学习大纲 学习流程如下&#xff1a; Java基础语法 …

网络安全架构之零信任安全

网络安全架构之零信任安全 文章目录 网络安全架构之零信任安全零信任安全时代背景安全世界“新旧时代”各种攻击风险层出不穷网络安全边界逐渐瓦解内外部威胁愈演愈烈 零信任架构零信任的理念在不可信的网络环境下重建信任构建自适应内生安全机制以身份为基石业务安全访问持续信…

Linux服务的简介与分类

服务的简介与分类 服务的分类 查询已安装的服务和区分服务 #列出所有rpm包默认安装服务的自启动状态 [rootlocalhost ~]# chkconfig --list atd atd 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭 [rootlocalhost ~]# chkconfig --list sshd sshd …

SpringBoot项目中访问HTML页面

在这种情况下&#xff0c;如果你要访问静态页面&#xff0c;肯定是不能正确访问的&#xff1a;会出现如下错误&#xff1a; 那么&#xff0c;此时&#xff0c;你应该&#xff1a; 静态资源映射&#xff1a; import org.springframework.context.annotation.Configuration; im…

command not found: wire 解决方案【学习笔记,不作教程】

command not found: wire command not found: wire command not found: wire go get github.com/google/wire/cmd/wirego install github.com/google/wire/cmd/wirelatest再次在 /bubble/cmd/bubble目录下执行wire wire wire: bubble/cmd/bubble: wrote /Users/zhengshijie/go…

音视频开发5 补充 - Nginx搭建rtmp流媒体服务器,目的是让ffmpeg 可以直播推流

直播推流 ffmpeg -re -i out.mp4 -c copy flv rtmp://server/live/streamName -re, 表示按时间戳读取文件 参考&#xff1a; Nginx 搭建 rtmp 流媒体服务器 (Ubuntu 16.04) https://www.jianshu.com/p/16741e363a77 第一步 准备工作 安装nginx需要的依赖包 打开 ubutun 终端…

[emailprotected](9)属性默认值和类型验证

目录 1&#xff0c;属性默认值1.1&#xff0c;函数组件1.2&#xff0c;类组件 2&#xff0c;属性类型验证2.1&#xff0c;和默认值的关系2.2&#xff0c;使用2.3&#xff0c;举例说明 1&#xff0c;属性默认值 通过组件的 defaultProps 静态属性设置。 1.1&#xff0c;函数组…

lllllllllll

ollllllllllllll

Leetcode 3160. Find the Number of Distinct Colors Among the Balls

Leetcode 3160. Find the Number of Distinct Colors Among the Balls 1. 解题思路2. 代码实现 题目链接&#xff1a;3160. Find the Number of Distinct Colors Among the Balls 1. 解题思路 这一题思路上同样比较清晰&#xff0c;我们只需用两个hash table来分别记录每一个…

Nginx与CDN集成:提升全球访问速度

一、引言 在当今互联网高速发展的时代&#xff0c;用户对于网站访问速度的要求越来越高。为了提升用户体验&#xff0c;许多企业和开发者都在寻求各种方法来优化网站的访问速度。其中&#xff0c;Nginx与CDN&#xff08;内容分发网络&#xff09;的集成就是一个非常有效的方法…

社会网络,生态网络,贸易网络,复杂网络边介数蓄意和随机攻击

​边介数&#xff08;Edge Betweenness&#xff09; # ” 边介数&#xff08;Edge Betweenness&#xff09; 1 边介数&#xff08;Edge Betweenness&#xff09; Summer IS HERE 边介数&#xff08;Edge Betweenness&#xff09;是一种度量边在网络中重要性的指标。它定义为…

golang float转string并去除末尾的0

写go时遇到一个场景要求将得到的浮点数保留两位小数&#xff0c;同时要去除末尾的0&#xff0c;试了一下 fmt.Sprintf 和 strconv.FormatFloat 都没能一步到位&#xff0c;最后只能先按小数位约分然后再转成字符串来解决这个问题&#xff0c;如果各位有更好的方式请在评论里指教…

Linux dig 命令

dig 命令是一个用于在 Unix/Linux 操作系统中执行 DNS 查询的工具。它是 DNS 客户端&#xff0c;通常用于查询 DNS 服务器的信息&#xff0c;如域名解析、IP 地址查询等。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 一、常见 DNS 记录类型 类型描述…

OpenStack平台Nova管理

1. 规划节点 使用OpenStack平台节点规划 IP主机名节点192.168.100.10controller控制节点192.168.100.20compute计算节点 2. 基础准备 部署的OpenStack平台 1. Nova运维命令 &#xff08;1&#xff09;Nova管理安全组规划 安全组&#xff08;security group&#xff09;是…

设计模式八股文

什么是设计模式&#xff1f; 设计模式是软件开发过程中经常遇到的问题的通用解决方案。类似于前人总结的经验&#xff0c;遇到相似问题的时候有个参考。 设计模式七大基本原则&#xff1f; 单一职责&#xff1a;一个类应该只作一件事情。将功能分为小的独立的单元。开放封闭…

CTF之Web_python_block_chain

这种题对于我来说只能看大佬的wp&#xff08;但是这一题是wp都看不懂&#xff0c;只能表达一下我的理解了&#xff09; &#xff08;最后有简单方法&#xff0c;前面一种没看懂没关系&#xff09; 下面这一部分是首页的有用部分 访问/source_code,得到源码&#xff1a; # -*-…

qt post请求 c++ 解压缩文件

目录 qt post请求 c下载代码&#xff1a; 默认下载保存路径&#xff1a; linux qt调用 unzip进行解压缩 pro文件配置&#xff1a; QT network qt post请求 c下载代码&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h" #include &…

ffmpeg怎么将vtt文件添加到视频中

FFmpeg 是一个非常强大的多媒体框架&#xff0c;可以用来处理音频、视频以及字幕文件。要将 WebVTT&#xff08;.vtt&#xff09;字幕文件添加到视频文件中&#xff0c;你可以使用 ffmpeg 的 subtitles 过滤器。以下是基本的命令格式&#xff1a; ffmpeg -i input_video.mp4 -…