LeetCode376 摆动序列

原题目
题目分析

方法一:直接遍历
将数组拆分,把每一部分分成一个单调序列,即单调递增和单调递减交替出现如
[1,17,5,10,13,15,10,5,16,8]
将其分成
1,17
17,5
5,10,13,15
15,10,5
5,16
16,8
元素的个数=序列个数+1
那么如何查找单调序列
即定一个最小值和一个最大值,然后遍历找每个序列的最小值和最大值,以此来判断是否满足要求
以上例为例
指针从首位开始遍历i=0,统计数res=1,若有数字存在则至少有1个数字满足条件
将数组第一个元素赋值给min=1;
循环将指针移动到序列最大位置即只要下一位大于等于当前值就往后移动一位.此时i=1
如果指针位置值大于min说明这个单调递增序列成立,返回值res+1
将当前最大值赋值给max=17
循环将指针移动到序列最小位置即即只要下一位小于等于当前值就往后移动一位.此时i=2
如果指针位置值小于min说明这个单调递增序列成立,返回值res+1
以此类推,进入第二次循环

完整代码


int wiggleMaxLength(int* nums, int numsSize){
    if(numsSize==0)return 0;
    int res=1,i=0,min,max;
    while(i<numsSize-1)
    {
        min=nums[i];//当前序列最小值
        while(i<numsSize-1&&nums[i]<=nums[i+1])//遍历至数组最大值
        {
            i++;
        }
        if(min<nums[i])//判断当前序列最大值是否大于最小值
        {
            res++;
        }
        max=nums[i];//当前序列最大值
        while(i<numsSize-1&&nums[i]>=nums[i+1])//遍历到数组最小值
        {
            i++;
        }
        if(max>nums[i])//判断当前序列最大值是否大于最小值
        {
            res++;
        }
    }
    return res;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Baal Austin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值