代码随想录 Day26 贪心算法01 中 LeetCode T376 摆动序列

简介: 代码随想录 Day26 贪心算法01 中 LeetCode T376 摆动序列

LeetCode T376 摆动序列

 

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

前言

这题我们看到可以删除数组中的元素也可以不删除可能就吓到了,其实是这道题可以用动态规划或者贪心的策略去解决问题,这里我们还是用贪心的解法去解决问题,具体动态规划的思路可以参照网站:代码随想录 (programmercarl.com)

摆动数列的定义

做这题之前我们得明白什么是摆动序列,举个例子[2,6,1,9,3]这个数组,呈现一个波动变化的形态,就称为摆动序列

如果序列只有两个元素,这里就认为摆动序列的长度为2,默认有两个摆动

题目思路:

这题我们首先要考虑情况,我列出以下三种情况:

1.首末元素

2.上下有平坡

3.单调有平坡

变量定义

curDiff:记录当前差值        假设目前遍历到的元素为i  ,curDiff = nums[i+1] - nums[i]

preDiff:记录之前的差值                              preDiff = nums[i] - nums[i-1]

count 记录结果,为了满足默认首尾元素的情况,我们默认count从1开始取值

我们只需要遍历一次数组,满足前后diff不同号即可

注意不能写成curDiff>=0这种情况,因为这样就表示从高或者低值到平坡,是不增加波动的

最后每次结束让pre更新为cur就可以了

这是一个错误的思路,我们是只有遇到了坡度变化才会让pre更新

for(int i = 0;i<nums.length-1;i++)
        {
            curDiff = nums[i+1] - nums[i];
            if((curDiff>0 && preDiff<=0 ) || (curDiff<0 && preDiff>=0))
            {
                count++;
                preDiff = curDiff;
            }
        }

代码模板:

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length<=1)
        {
            return nums.length;
        }
        int preDiff = 0;
        int count = 1;
        int curDiff = 0;
        for(int i = 0;i<nums.length-1;i++)
        {
            curDiff = nums[i+1] - nums[i];
            if((curDiff>0 && preDiff<=0 ) || (curDiff<0 && preDiff>=0))
            {
                count++;
                preDiff = curDiff;
            }
        }
        return count;
    }
}
相关文章
|
4天前
|
机器学习/深度学习 算法 API
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
9 0
|
4天前
|
算法 关系型数据库 C语言
卡尔曼滤波简介+ 算法实现代码(转)
卡尔曼滤波简介+ 算法实现代码(转)
20 4
|
4天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
9 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
1天前
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
19 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长