解题思路
感谢评论区老哥的想法。
创建两个数组up和down。当arr[i]>arr[i-1]时,up继承down[i-1]的值并加一,down[i]置1。当arr[i]<arr[i-1]时,down继承up[i-1]的值并加一,up[i]置1。当相同时,同时置一(即重新开始),最后返回up和down中的最大值。
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr) {
int n=arr.size();//数组长度
//两个动态数组
vector<int> up(n,0);
vector<int> down(n,0);
//用来返回 最大值
int t=0;
//因为限定n!=0,所以不用判断
// if(n==0) return 0;
//当n为1 或者 n为2的同时两个数相等时,返回1
if(n==1 || (n==2 && arr[0]==arr[1])) return 1;
//当n为2 且 两个数不等,返回2
if(n==2 && arr[0]!=arr[1]) return 2;
//初始化边界值
up[0]=1;
down[0]=1;
for(int i=1;i<n;i++)
{
//如果相邻为'<'
if(arr[i]>arr[i-1])
{
up[i]=down[i-1]+1;
down[i]=1;
}
//如果相邻为'>'
if(arr[i]<arr[i-1])
{
down[i]=up[i-1]+1;
up[i]=1;
}
//如果相邻为'='
if(arr[i]==arr[i-1])
{
up[i]=1;
down[i]=1;
}
//寻找up和down中的最大值
t=max(t,up[i]);
t=max(t,down[i]);
}
return t;
}
};
作者:kutu1bw-i
链接:https://leetcode.cn/problems/longest-turbulent-subarray/solution/dong-tai-gui-hua-by-kutu1bw-i-g9i0/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。