欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 每日一题——376. 摆动序列

每日一题——376. 摆动序列

2025/2/22 16:23:15 来源:https://blog.csdn.net/m0_62867827/article/details/145784591  浏览:    关键词:每日一题——376. 摆动序列

题目链接:376. 摆动序列 - 力扣(LeetCode)

代码:

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int curdiff = 0;int prediff = 0;int result = 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)){result++;prediff = curdiff;}}return result;}
};

将整个序列抽象到坐标轴上,这里指的摆动也就是坐标轴上的极值

统计到所有极值的个数,则为答案的摆动数。

符合极值的条件:prediff和curdiff相反

但有细节处理需要注意:

-有平坡的情况:只记录一个,靠右或者靠左,引入了=的情况(靠左:curdiff == 0,靠右:prediff == 0)

-只有两个数:因为这里的判断需要三个数才能完成,i,i-1,i+1,默认prediff=0(模拟第一个数a前还有一个数a,对于后面判断,两个数就会判断成两个极值)

-单调区间有平坡:在只有摆动变化的时候更新prediff,不然prediff =0,curdiff>0的时候记录一次,中间平坡,prediff变化,prediff = 0,curdiff>0的时候记录一次,最后prediff>0,curdiff<0的时候记录一次,中间就重复了,但中间的位置实际是prediff>0,curdiff>0,由于相同数值的情况,prediff更新为0,导致这种情况也被算成了一个极值,是错误的,所以只在有摆动的地方,在记录pre

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词