当前位置: 首页 > news >正文

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

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;}
};

http://www.lryc.cn/news/397255.html

相关文章:

  • pytorch-RNN存在的问题
  • Leetcode 17:电话号码的字母组合
  • jmeter-beanshell学习4-beanshell截取字符串
  • QScrollArea 设置最大的高度值
  • CentOS6禁止锁屏
  • MapReduce底层原理详解:大案例解析(第32天)
  • 【JVM基础篇】Java垃圾回收器介绍
  • java通过poi-tl导出word实战详细步骤
  • 将自签证书添加到Java的可信任证书列表中
  • 一文清晰了解CSS——简单实例
  • 工程师 - 什么是XML文件
  • [AI 大模型] 阿里巴巴 通义千问
  • 关于无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上 解决方法
  • 轻松创建对象——简单工厂模式(Java实现)
  • Docker Dockerfile:构建与优化
  • 开源项目有哪些机遇与挑战?
  • 利用【Python】【线性规划】优化工厂生产:实现智能资源配置与利润最大化的现代解决方案
  • 【spark】Exception in thread “main“ ExitCodeException exitCode=-1073741701
  • 数学建模美赛经验小结
  • 206. 反转链表 (Swift 版本)
  • 海狐外卖O2O商城系统:技术架构与运营模式的深度解析
  • 14-31 剑和诗人5 - 使用 AirLLM 和分层推理在单个 4GB GPU 上运行 LLama 3 70B
  • 风景园林工程设计乙级资质业绩要求案例分析
  • 无人机之飞行规划与管理篇
  • realsense D435l+mid360标定
  • 深度学习中的正则化技术 - 数据集增强篇
  • 【Docker系列】Docker 镜像源:优化你的容器化开发流程
  • 【Linux】Windows环境下配置虚拟机静态IP
  • 完美解决AttributeError: ‘list‘ object has no attribute ‘shape‘的正确解决方法,亲测有效!!!
  • 链接服务器“XX”的OLEDB访问接口“MSOLEDBSQL”返回了消息“登录超时已过期” 解决方法