题干:
代码:
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只需要在出现摆动时变更就行了(为了防止单调破加平坡情况在“拐点”处多算一次)。