题干:
代码:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size() <= 1)return nums.size();
int prediff = 0;
int curdiff = 0;
int res = 1;
for(int i = 0; i < nums.size() - 1; i++){
curdiff = nums[i + 1] - nums[i];
if((prediff >= 0 && curdiff < 0) || (prediff <= 0 && curdiff > 0)){
res++;
prediff = curdiff;
}
}
return res;
}
};
规定开头就算一个坡,故res初始值为1.
摆动坡情况:
①上下坡
②上下坡加平坡
③首尾:算两个坡
④单调坡加平坡:只有两个
prediff只需要在出现摆动时变更就行了(为了防止单调破加平坡情况在“拐点”处多算一次)。