978.最长湍流子数组

如题~

A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:
i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1]
或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]
也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。
返回 A 的最大湍流子数组的长度

示例 1:
输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])

实际上就是一大一小,或者一小一大。连续的。

奇了怪了,我力扣经常这样出错。。懵逼,还不知道错哪了。

哎,最后好不容易!改过来了。
就是这种错误:
在这里插入图片描述
正确代码如下:

class Solution {
public:
    int compare(int i,int j)
    {
        if(i>j)        return 1;
        else if(i==j)  return 0;
        else           return -1;
    }

    int maxTurbulenceSize(vector<int>& arr) {
        int left = 0,right = 1;//窗口左右边界
        int res = 1;
        int a = arr.size();
        for(;right < a;++right)//开始构建窗口
        {
            int judge = compare(arr[right-1],arr[right]);
            if(right == a-1||judge * compare(arr[right],arr[right+1]) != -1)
            {       //第一个判断是否为最后,第二个判断是否是湍流
                if(judge != 0)
                {
                    res = max(res,right-left+1);//更新窗口大小
                }
                left = right;//左边窗口右移
            }
        }return res;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值