思路: 满足摆动序列要求选择的子序列的差值正负交替,既不能一直增大,亦不能一直减小,所以我们只选择波峰和波谷,可以剔除连续增大和减小的数字,在一次遍历过程中,维护最长上升子序列,最长下降子序列。
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int down=1,up=1;
for(int i=1;i<nums.size();i++){
if(nums[i]>nums[i-1])
up=down+1;
if(nums[i]<nums[i-1])
down=up+1;
}
return nums.size()==0?0:max(down,up);
}
};