原题链接:https://leetcode-cn.com/problems/wiggle-subsequence/
相关问题:最长湍流子数组
动态规划
使用两个数组up和down
up[i] 代表i位置的上升节点的最长长度
down[i] 代表i位置的下降节点的最长长度
状态转移
当nums[i]>nums[j]时, up[i]=max(up[i],down[j]+1)
当nums[i]<nums[j]时, down[i]=max(down[i],up[j]+1)
并且这个方法,直接就可以跳过出现连续的重复数字的判断,非常好
int wiggleMaxLength(vector<int>& nums) {
int len=nums.size();
if(len<=1) return len;
vector<int> up(len,0);
vector<int> down(len,0);
for(int i=1;i<len;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j]){
up[i]=max(up[i],down[j]+1);
}else if(nums[i]<nums[j]){
down[i]=max(down[i],up[j]+1);
}
}
}
return 1+max(up[len-1],down[len-1]);
}