动态规划dp —— 24.最长湍流子数组

动态规划dp —— 24.最长湍流子数组_第1张图片

解释:数组中子数组中相邻数值一升一降称为湍流子数组

示例1:

动态规划dp —— 24.最长湍流子数组_第2张图片

 

 1.状态表示

是什么?dp表中里的值所表示的含义就是状态表示

因为i位置是有两种情况:1.上升趋势 2.下降趋势

动态规划dp —— 24.最长湍流子数组_第3张图片

 所以需要定义两种状态表示来把两种情况分开

f[i]表示:以i位置结尾的所有子数组中,最后呈现“上升”趋势下的最长湍流子数组

g[i]表示:以i位置结尾的所有子数组中,最后呈现“下降”趋势下的最长湍流子数组

2.状态转移方程

两种状态表示遇到不同情况:

动态规划dp —— 24.最长湍流子数组_第4张图片

 动态规划dp —— 24.最长湍流子数组_第5张图片

 

3.初始化

保证填表的时候不越界

填表要用到前一个位置

因为最差的情况也会是长度1

所以直接把第一个位置初始化为1

4.填表顺序

为了填写当前状态的时候,所需要的状态已经计算过了

从左往右填表,两个表一起填

5.返回值

题目要求+状态表示

两个表里的最大值

 6.代码

class Solution {
public:
    int maxTurbulenceSize(vector& arr) {
        int n = arr.size();
        //1.创建dp表
        vector f(n,1);
        vector g(n,1);
        //2.初始化
        //3.填表
        int ret = 1;
        for(int i = 1;i < n;i++)
        {
            if(arr[i-1] < arr[i] ) f[i] = g[i-1] +1;
            else if(arr[i-1] > arr[i]) g[i] = f[i-1]+1;
            ret = max(ret,max(f[i],g[i]));
        }
        //4.返回值
        return ret;
    }
};

你可能感兴趣的:(动态规划,动态规划,算法)