力扣题解( 最长湍流子数组)

978. 最长湍流子数组

已解答

给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 

如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。

更正式地来说,当 arr 的子数组 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]

本题看似例子很长,实则很简单,即湍流数组形状为W型或者M型即可(认为中间比两边高,或者中间比两边低,然后每间隔一个都符合这个定律)(其实所谓w,m也不过就是开始位置差了一个而已)。因此做法也很简单,分情况讨论即可。注意本题如果前后两个元素相等,则必定构不成湍流数组。

对于偶数位置高的,若第i个仍满足这个定律,则长度加1,而这个满足则偶数位置低的那个一定不满足,因此那个的长度变为0.对奇数位置高的同理。

class Solution {
public:
    int maxTurbulenceSize(vector<int>& arr) {

     int n=arr.size();

     vector<int>m(n,0);
     vector<int>w(n,0);
     m[0]=w[0]=1;
     for(int i=1;i<n;i++)
     {
        if(i%2==1)
        {
            //n为偶
            if(arr[i]>arr[i-1])
            {
                m[i]=m[i-1]+1;
                w[i]=1;
            }
            else if(arr[i]<arr[i-1])
            {
                w[i]=w[i-1]+1;
                m[i]=1;
            }
            else
            {
                m[i]=w[i]=1;
            }
        }else 
        {
              //n为奇
            if(arr[i]<arr[i-1])
            {
                m[i]=m[i-1]+1;
                w[i]=1;
            }
            else if(arr[i]>arr[i-1])
            {
                w[i]=w[i-1]+1;
                m[i]=1;
            }
            else
            {
                m[i]=w[i]=1;
            }
        }
     }

     int ret=1;
     for(int i=1;i<n;i++)
     {
        int nm=max(m[i],w[i]);
        ret=max(nm,ret);
     }
     
     return ret;
     
     
         }
};

相关推荐

  1. 题解湍流数组)

    2024-07-11 09:48:02       21 阅读
  2. 题解递增序列)

    2024-07-11 09:48:02       20 阅读
  3. 题解定差序列)

    2024-07-11 09:48:02       23 阅读
  4. 2765-交替数组

    2024-07-11 09:48:02       64 阅读
  5. 2831.找出等值数组

    2024-07-11 09:48:02       26 阅读
  6. 题解等差数列)

    2024-07-11 09:48:02       20 阅读
  7. 题解的斐波那契序列的长度)

    2024-07-11 09:48:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 09:48:02       53 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 09:48:02       56 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 09:48:02       46 阅读
  4. Python语言-面向对象

    2024-07-11 09:48:02       57 阅读

热门阅读

  1. ORACLE 数据库ADG切换

    2024-07-11 09:48:02       16 阅读
  2. Memcached介绍和详解

    2024-07-11 09:48:02       17 阅读
  3. js实现打印

    2024-07-11 09:48:02       21 阅读
  4. dlib简介

    2024-07-11 09:48:02       22 阅读
  5. PDF文件在线处理工具(侧重数理及论文)

    2024-07-11 09:48:02       15 阅读
  6. 20.js获取页面卷去的距离以及滚到到指定位置

    2024-07-11 09:48:02       21 阅读
  7. 【人脸识别、Python实现】PyQt5人脸识别管理系统

    2024-07-11 09:48:02       19 阅读
  8. Flutter EasyRefresh:介绍与使用指南

    2024-07-11 09:48:02       21 阅读
  9. Perl编译器架构:前端与后端的精细分工

    2024-07-11 09:48:02       21 阅读
  10. Golang 高频面试题 && 答案

    2024-07-11 09:48:02       23 阅读
  11. Spring Boot常用注解类

    2024-07-11 09:48:02       21 阅读