今日题目:leetcode376
点击跳转题目
观察样例2:
发现最长摆动序列都是极大值和极小值 再加上两个端点,那么我们保证每次都能选择到每个极值点,就能从局部最优推广全局最优了!
但是还有一些细节情况需要注意,就是如果出现连续相同的值,如图:
代码:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums)
{
int cnt = 0;
//记录每个元素左边的单调性,初始为0为了记录第一个值为摆动元素
int left = 0;
for(int i = 0; i < nums.size() - 1; i++)
{
int right = nums[i+1] - nums[i]; //得出右边的单调性
if(right == 0) continue;
//符号相反,表示单调性不同,是极值点
if(left * right <= 0) cnt++;
left = right;//迭代为下一个元素左边的单调性
}
return cnt+1; //+1是为了记录原数组最后一个值
}
};