[贪心法]leetcode376:摆动序列(medium)

编程入门 行业动态 更新时间:2024-10-28 01:24:39

[<a href=https://www.elefans.com/category/jswz/34/1769875.html style=贪心法]leetcode376:摆动序列(medium)"/>

[贪心法]leetcode376:摆动序列(medium)

题目:

题解:

  • 贪心法, 贪心的正确性:可想成求波峰和波谷的个数,就可得证了。
  • 代码实现:主要使用 flag 来表示前面元素的符号,flag 为 -1 表示前面两个元素的差值为负号,那么此时我们只有nums[i]>nums[i-1]找到正号,才能使序列变长。换句话说前面是波谷,我们需要找到转折点,才能到达波峰,贪心法得证。flag 为 1 表示前面两个元素的差值为正号,那么此时我们只有nums[i]<nums[i-1]找到负号,才能使序列变长。换句话说前面是波峰,我们需要找到转折点,才能到达波谷,贪心法得证

代码如下:

class Solution {
public://题解:贪心算法,贪心算法的正确性需要数学证明,可简单想成求波峰和波谷的个数之和//思路:扫描一遍数组,最长摆动序列一定包含数组第一个和第二个元素,其余元素根据正负号来进行添加来更新子序列长度int wiggleMaxLength(vector<int>& nums) {//flag表示两个元素之间的正负号,1表示正号,-1表示符号,0用来添加第二个元素与第一个元素的符号int count=1,flag=0,n=nums.size();for(int i=1;i<n;++i){if(nums[i]>nums[i-1]&&(flag==0||flag==-1)){count++;flag=1;}if(nums[i]<nums[i-1]&&(flag==0||flag==1)){count++;flag=-1;}}return nums.empty()?0:count;}
};

更多推荐

[贪心法]leetcode376:摆动序列(medium)

本文发布于:2023-07-28 18:55:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1280243.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:贪心   序列   medium

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!