方法一(贪心)
示例代码
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int len=nums.size();
if(len<=1){
return len;
}
int curdiff=0,prediff=0,result=1;
for(int i=0;i+1<len;i++){
curdiff=nums[i+1]-nums[i];
if((prediff>=0&&curdiff<0)||(prediff<=0&&curdiff>0)){
result++;
prediff=curdiff;
}
}
return result;
}
};
效果展示
方法二(动态规划)
示例代码
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int len=nums.size();
vector<int> up(len),down(len);
up[0]=1,down[0]=1;
for(int i=1;i<len;i++){
if(nums[i]>nums[i-1]){
up[i]=max(up[i-1],down[i-1]+1);
}
else if(nums[i]<nums[i-1]){
down[i]=max(down[i-1],up[i-1]+1);
}
else{
up[i]=up[i-1];
down[i]=down[i-1];
}
}
return max(up[len-1],down[len-1]);
}
};
效果展示