贪心算法----摆动序列

2024-05-12 03:04
文章标签 贪心 算法 摆动 序列

本文主要是介绍贪心算法----摆动序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今日题目:leetcode376

点击跳转题目

观察样例2:

发现最长摆动序列都是极大值和极小值 再加上两个端点,那么我们保证每次都能选择到每个极值点,就能从局部最优推广全局最优了!

但是还有一些细节情况需要注意,就是如果出现连续相同的值,如图:

  • 对于上图中左边的两种情况,整体是呈现单调递减的,没有出现极值点,不用记录进摆动序列
  • 对于上图中右边的两种情况,是等价于极值点的,只需记录一个进摆动序列即可
  • 综上,遇到连续相同的值时,我们只需要考虑相同值中最靠后的位置的那个值,其他的忽略,这样就转化为把相同元素”删除“成只剩一个元素的情况

遍历数组时,我们可以用一个left来记录这个值左边是递增还是递减,然后和这个数的右边判断,单调性不同即可记录该元素

代码:

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int cnt = 0;//记录每个元素左边的单调性,初始为0为了记录第一个值为摆动元素int left = 0;for(int i = 0; i < nums.size() - 1; i++){int right = nums[i+1] - nums[i]; //得出右边的单调性if(right == 0) continue;//符号相反,表示单调性不同,是极值点if(left * right <= 0) cnt++;       left = right;//迭代为下一个元素左边的单调性}return cnt+1; //+1是为了记录原数组最后一个值}
};

这篇关于贪心算法----摆动序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981422

相关文章

操作系统入门 -- CPU调度算法

操作系统入门 – CPU调度算法 在了解完进程和线程的概念后,我们就需要了解当一个进程就绪后系统会进行怎样的资源分配并运行进程,因此我们就需要了解CPU的调度算法 1.CPU调度 1.1概念 CPU调度即按照某种算法将CPU资源分配给某个就绪的进程。 1.2调度层次 高级调度(作业调度) 内存空间有限,可能无法将用户提交的全部作业放入内存,只能挑选一个或几个放入。建立PCB,获得竞

数据科学家必须了解的六大聚类算法:带你发现数据之美

在机器学习中,无监督学习一直是我们追求的方向,而其中的聚类算法更是发现隐藏数据结构与知识的有效手段。目前如谷歌新闻等很多应用都将聚类算法作为主要的实现手段,它们能利用大量的未标注数据构建强大的主题聚类。本文从最基础的 K 均值聚类到基于密度的强大方法介绍了 6 类主流方法,它们各有擅长领域与情景,且基本思想并不一定限于聚类方法。 本文将从简单高效的 K 均值聚类开始,依次介绍均值漂移聚类、

排序算法-基础

选择,冒泡,直接插入 简单选择排序   简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。   在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以

KCF -目标检测算法总结

KCF简介 KCF是一种鉴别式追踪方法,这类方法一般都是在追踪过程中训练一个目标检测器,使用目标检测器去检测下一帧预测位置是否是目标,然后再使用新检测结果去更新训练集进而更新目标检测器。而在训练目标检测器时一般选取目标区域为正样本,目标的周围区域为负样本,当然越靠近目标的区域为正样本的可能性越大。 简单来说 KCF 是 核相关滤波算法,滤波器 和 跟踪patch 进行相乘的到相关性,对应位置较

K-means 算法迭代过程

K-means 算法的基本步骤:      1.从 n个数据对象任意选择 k 个对象作为初始聚类中心迭代     2.通过把每个点分配给最近的聚类中心,从而形成K个类 重新计算每个类的聚类中心     3.终止 如果计算后,聚类中心不发生改变  看图:仔细看每张图的变化 更易理解 (k = 2) K-means 算法优点   算法框架清晰,简单,容易理解。 本算法确定的k个划分到达平方误差最

KD-TREE 算法原理

KD-TREE 算法原理 http://www.oneie.com/index.php/qyjs/47-txcl/1532-kd-tree   本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd- Tree(Kd树)。Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor

普林斯顿大学教授终于把算法整理成图解笔记

普林斯顿大学教授终于把算法整理成图解笔记了!!! 这些年虽然学到的编程知识越来越多,但是我对算法却始终没搞明白,直到偶然间看到这份笔记,我才认识到这些概念是多么简单。 对于很多刚入门的小伙伴来说,刚开始学习就要接触一大堆自己没有听说过的算法可谓是“六神无主”,“不知从何学起”,“学了记不住,又好像没学”。今天,小编给大家带来了一本新手党的福音—-算法图解,这本书将最基

快速在安卓端验证深度学习算法模型

原 https://zhuanlan.zhihu.com/p/76909819 https://zhuanlan.zhihu.com/p/76909819   1、背景 ​ 前段时间在知乎上溜达,看到  糖心他爸  大神的专栏-实战嵌入端的AI算法,进去一看,不得了,发现新大陆了,深度学习模型还能在安卓端这么玩的吗? ​ 一般对我们这种初级炼丹师,要验证算法在端上的能力以及实测效果

竞赛选题 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 1 基于 Keras 用 LSTM 网络做时间序列预测 时间序列预测是一类比较困难的预测问题。 与常见的回归预测

最长特殊序列 II

题目链接:leetcode:最长特殊序列 II 描述 给定字符串列表 strs ,返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在,返回 -1 。 特殊序列 定义如下:该序列为某字符串 独有的子序列(即不能是其他字符串的子序列)。 s 的 子序列可以通过删去字符串 s 中的某些字符实现。 例如,“abc” 是 “aebdc” 的子序列,因为您可以删除"aebdc"中的下划线字符来得到