解释:数组中子数组中相邻数值一升一降称为湍流子数组
示例1:
1.状态表示
是什么?dp表中里的值所表示的含义就是状态表示
因为i位置是有两种情况:1.上升趋势 2.下降趋势
所以需要定义两种状态表示来把两种情况分开
f[i]表示:以i位置结尾的所有子数组中,最后呈现“上升”趋势下的最长湍流子数组
g[i]表示:以i位置结尾的所有子数组中,最后呈现“下降”趋势下的最长湍流子数组
2.状态转移方程
两种状态表示遇到不同情况:
3.初始化
保证填表的时候不越界
填表要用到前一个位置
因为最差的情况也会是长度1
所以直接把第一个位置初始化为1
4.填表顺序
为了填写当前状态的时候,所需要的状态已经计算过了
从左往右填表,两个表一起填
5.返回值
题目要求+状态表示
两个表里的最大值
6.代码
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n = arr.size();
//1.创建dp表
vector<int> f(n,1);
vector<int> 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;
}
};