力扣刷题记录 -- JAVA--78---376. 摆动序列


一、题目

在这里插入图片描述在这里插入图片描述

二、代码

class Solution 
{
    //子序列是可以删除的
    //只需要保留峰值就可以了
    public int wiggleMaxLength(int[] nums) 
    {
       if(nums.length==1 ) return 1;
       int length = nums.length;

       int i;
       //第一次作差不为0 加一
       int last_symbol = -(nums[1]-nums[0]);
       int symbol=0;
       int temp_length = 1;


       int last_num = nums[0];

       for(i=1;i<length;i++)
       {
           
           symbol = nums[i]-nums[i-1];
           System.out.println("   last_symbol  " + last_symbol);
           System.out.println("   symbol  " + symbol);
           
           //symbol大于0小于0都要计数
           if((last_symbol<=0&&symbol>0)||(last_symbol>=0&&symbol<0))
           {
               temp_length++;
               //摆动时更新
               last_symbol = symbol;
               
           }
           System.out.println("   temp_length  " + temp_length);
           

       }

       return temp_length;


    }
}

三、运行结果

在这里插入图片描述

四、附录

二刷

class Solution 
{
    //寻找局部峰值
    public int wiggleMaxLength(int[] nums) 
    {
        if(nums.length < 2 ) return nums.length;
        int res = 2;
        int i;
        int length=nums.length;
        int direction = 2;
        int another = 1;
        while(another<length&&nums[another] == nums[0]) another++;
        if(another==length) return 1;
        int min = Math.min(nums[0],nums[another]);
        int max = Math.max(nums[0],nums[another]);
        
        if(nums[0]<nums[another]) direction = 1;
        for(i=another+1;i<=length-1;i++)
        {
           //1是凸起  
            if(direction==1)
            {
                if(nums[i]>max) max = nums[i];
                else if(nums[i]<max) 
                {
                    //System.out.println("1   "+nums[i]);

                    res++;
                    min = nums[i];
                    direction=2;
                }
            }
           
           //2是凹陷
           else if(direction==2)
           {
               if(nums[i]<min) min = nums[i];
               else if(nums[i]>min)
               {
                   //System.out.println("2   "+nums[i]);

                   res++;
                   max = nums[i];
                   direction=1;
               }
           }

        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@白圭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值