问题描述与解题思路
确定本题的状态表示
f[i]的含义是以nums[i]为终点的最大湍流子数组长度
确定本题的状态转移方程
if(nums[i]==nums[i-1]) {
f[i]=1;
}
else if((long long) (nums[i]-nums[i-1])*(nums[i-1]-nums[i-2])<0)
f[i]=f[i-1]+1;
else{
f[i]=2;
}
填表求值
根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果
代码实现
class Solution {
public:
int maxTurbulenceSize(vector<int>& nums) {
int n=nums.size();
if(n<2) return n;
if(n==2){
if(nums[0]==nums[1])return 1;
else return 2;
}
vector<int> f(n);
// f[i]的含义是以nums[i]为终点的最大湍流子数组长度
f[0]=1;f[1]=2;
int ret=0;
for(int i=2;i<n;i++){
if(nums[i]==nums[i-1]) {
f[i]=1;
}
else if((long long) (nums[i]-nums[i-1])*(nums[i-1]-nums[i-2])<0)
f[i]=f[i-1]+1;
else{
f[i]=2;
}
ret=max(ret,f[i]);
}
return ret;
}
};
229

被折叠的 条评论
为什么被折叠?



