题目链接:https://leetcode-cn.com/problems/longest-turbulent-subarray/
将问题划分为子问题,子问题1是子数组的最后一个元素较其前一个元素大,子问题2是子数组的最后一个元素较其前一个元素小,那么总问题就是两个子问题数组长度较大的那一个。
用a数组存储子问题1,b数组存储子问题2,例如,a[i]表示前 i 个元素中最长的满足子问题1的子数组的长度。
代码如下:
class Solution {
public:
int maxTurbulenceSize(vector<int>& A) {
int res = 1;
int len = A.size();
int a[len + 1], b[len + 1];
a[1] = 1;
b[1] = 1;
for(int i = 2; i <= len; i++) {
if(A[i - 2] < A[i - 1]) {
a[i] = b[i - 1] + 1;
b[i] = 1;
} else if(A[i - 2] > A[i - 1]) {
b[i] = a[i - 1] + 1;
a[i] = 1;
} else {
a[i] = 1;
b[i] = 1;
}
res = max(res, a[i]);
res = max(res, b[i]);
}
return res;
}
};