算法日常・每日刷题--<动态规划>24

978. 最长湍流子数组 - 力扣(LeetCode)

题目描述

当一个子数组满足下面条件之一时,我们称它为湍流子数组:

  • 对于索引 i,当 i 是奇数:arr[i] > arr[i-1];当 i 是偶数:arr[i] < arr[i-1] 或者
  • 对于索引 i,当 i 是奇数:arr[i] < arr[i-1];当 i 是偶数:arr[i] > arr[i-1]

简单一句话:相邻元素大小交替,像波浪一样起伏,不能连续上升,也不能连续下降 。 给定数组 arr,返回最长湍流子数组的长度。

解法

DP 数组定义

  • fx[i]:以 arr[i] 结尾,最后一步是 arr i < arr i-1(下降) 的湍流子数组最大长度
  • gx[i]:以 arr[i] 结尾,最后一步是 arr i > arr i-1(上升) 的湍流子数组最大长度

湍流的特点:上升后面必须接下降,下降后面必须接上升,交替出现。

状态转移

  1. arr[i] > arr[i-1](当前上升)
    • 当前上升,上一步必须是下降才能构成湍流
    • gx[i] = fx[i-1] + 1
    • fx[i] = 1(不能以下降结尾,重置为 1,代表只有自己)
  2. arr[i] < arr[i-1](当前下降)
    • 当前下降,上一步必须是上升才能构成湍流
    • fx[i] = gx[i-1] + 1
    • gx[i] = 1
  3. arr[i] == arr[i-1](相等,湍流断裂)
    • 上升、下降都无法延续,fx[i] = 1,gx[i] =1,子数组只能包含自身
cpp 复制代码
class Solution {
public:
    int maxTurbulenceSize(vector<int>& arr) {
        int n=arr.size();
        vector<int>fx(n,0);
        vector<int>gx(n,0);
        if(n==1)return 1;
        if(n==2&&arr[0]!=arr[1])return 2;
        if(n==2&&arr[0]==arr[1])return 1;
        fx[0]=1;fx[1]=arr[0]>arr[1]?2:1;
        gx[0]=1;gx[1]=arr[0]<arr[1]?2:1;
        int ret=1;
        for(int i=2;i<n;i++)
        {
            if(arr[i]>arr[i-1])
            {
                fx[i]=1;
                gx[i]=fx[i-1]+1;
            }
            else if(arr[i]<arr[i-1])
            {
                gx[i]=1;
                fx[i]=gx[i-1]+1;
            }
            else{
                gx[i]=fx[i]=1;
            }
            int maxsize=max(fx[i],gx[i]);
            ret=ret>maxsize?ret:maxsize;
        }
        return ret;
    }
};
相关推荐
ZhengEnCi9 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考9 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长11 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满12 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor12 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David12 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12612 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI12 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..13 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录13 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法