当前位置: 首页 > news >正文

【贪心之摆动序列】

题目: 

分析: 

这里我们使用题目中给的第二个实例来进行分析

题目中要求我们序列当中有多少个摆动序列,摆动序列满足一上一下,一下一上,这样是摆动序列,并且要输出摆动序列的最长长度

 

通过上面的图我们可以知道有5个摆动,一个摆动是由三个数组成的,因为中间的数会被重复使用,所以我们这里算一个摆动为一个数,加上最左边和最右边的数,5+2=7刚好解释我们的答案

所以这里我们只需要记录我们的摆动然后加上我们两边的数就可以了

但是题目上又说

所以这里我们从第一个数算起,将我们的最长序列长度初始化为1,两个变量,一个prediff(上一个数和上上一个数的差值),一个cur(当前的数和上一个数的差值),prediff用来存上一个摆动的状态,curdiff用来获取当前位置的摆动状态,如果判断上一个摆动状态和当前的摆动状态(一正一负,或者一负一正或者一0一正,一0一负这四种情况,为什么会有相等的情况呢,因为题目上说了如果是两个不相等数,答案是2就是说没有明确的摆动pre为0的时候,curdiff为任意不为0,也属于我们的摆动),结果加一,将当前状态赋值给上一个状态,然后继续遍历,如果状态一样,说明不是摆动,继续进行遍历

模拟一下:

如果我们的序列只有两位数,就是1,2如何实现答案输出二呢,那就是一0一正的情况,如果符合这种情况,我们就让结果加一,1(初始化)+ 1 = 2 也实现了我们的预期

for (int i = 0; i < nums.size() - 1; i++) {
            curdiff = nums[i + 1] - nums[i];
            if ((prediff <= 0 && curdiff > 0) ||
                (prediff >= 0 && curdiff < 0)) {
                ans += 1;
            }
        }

下面就是我们对这个数组的模拟情况

情况一: 

 情况二:

 

 情况三:

如果碰到这种一直上升的情况该怎么办呢,其实很简单,当我们的cur为0的时候,我们不对pre赋值,就碰不到一0一正的情况,就没办法赋值了

 

 完整代码:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        // 判断当前坡和上一个坡的坡度相反的时候,表示一个坡度,这时候坡度加一
        // 最开始初始化为1,题目说一个也是一个坡度
        int ans = 1;
        if (nums.size() == 1)
            return 1;
        int curdiff = 0; // 当前坡度 - 当前节点延伸的坡度
        int prediff = 0; // 上一个坡度
        for (int i = 0; i < nums.size() - 1; i++) {
            curdiff = nums[i + 1] - nums[i];
            if ((prediff <= 0 && curdiff > 0) ||
                (prediff >= 0 && curdiff < 0)) {
                ans += 1;
            }
            if (curdiff != 0) {
                prediff = curdiff; // pre一直跟随这cur
            }
        }
        return ans;
    }
};

 

相关文章:

  • 三、Virtual Device Manager
  • CST1019.基于Spring Boot+Vue智能洗车管理系统
  • 从零手写RPC-version0
  • Android游戏逆向工程全面指南
  • MySQL慢查询全攻略:定位、分析与优化实战
  • Python 深度学习 第5章 机器学习的核心问题泛化及如何提高模型的泛化能力实例
  • 【MySQL】关于何时使用start slave和start slave user=‘’ password=‘’
  • 计算机的发展及应用
  • minio重大更新!RELEASE.2025-04-08T15-41-24Z发布:修复关键Bug,存储管理更高效!
  • 基于PyQt5的Jupyter Notebook转Python工具
  • 生物化学笔记:医学免疫学原理16 自身免疫和自身免疫性疾病
  • 电感特性参数、选型方法与厂商推荐
  • Spring Boot(二十二):RedisTemplate的List类型操作
  • DWS常用操作手册
  • Windows 10和Windows 11系统截图的9种方式【简便实用】
  • Mac M1管理多个Node.js版本
  • 深入解析区块链技术:原理、应用与未来展望
  • java(二):java的运算和流程控制
  • 在Ubuntu下交叉编译 Qt 应用程序(完整步骤)
  • 竞拍商城:电商创新的博弈场与未来趋势
  • 张永宁任福建宁德市委书记
  • 印军称中国向巴基斯坦提供防空系统协助,外交部:中方十分重视与印、巴两国关系
  • 江苏疾控:下设部门无“病毒研究所”,常荣山非本单位工作人员
  • 回家了!子弹库帛书二、三卷将于7月首次面向公众展出
  • 光明日报社副总编辑薄洁萍调任求是杂志社副总编辑
  • 浙江一家长称小学老师打孩子还威胁要从3楼扔下,当地警方已立案