跳到主要内容

376. 摆动序列

376. 摆动序列 - 力扣(LeetCode)

一开始我是想到了用连续上升下降的方法来写的,但是总感觉会出现很多种情况,望而却步

我想的是,怎么从原数组删除元素,是从当前遍历下标还是下标的下一个,怎么删就成了我思考的问题。

但是,这种情况应该用上升/下降序列来实现ans++

或者说将平的地方删掉

可以,但很麻烦,也是要记录上升下降沿,然后将两个下标相减得到,不如记录相加来的优雅

问题是你要怎么想到这样做?

花点时间总能做出来的,下一道题我们来试一试自己动手做。

int wiggleMaxLength(vector<int>& nums) {
//大致思路
//一个循环,int diff,如果diff不满足于上一个相负,那就跳过该数
int prediff=0,curdiff=0,ans=1;
for (int i = 0; i < nums.size() - 1; i++) {
curdiff = nums[i + 1] - nums[i];
//上升沿是pre
if ((prediff <= 0 && curdiff > 0) || (prediff >= 0 && curdiff < 0)) {
ans++;
prediff = curdiff;
}
}
return ans;
}