解题思路 贪心算法
假如给出一组图要判断最长摆动序列 规律是 起点结束点和 前后位置有落差的转折点
这转折点的条件是 当前位置数与前面一个数的差 与 后一个位置与当前位置的差的乘积得小于0
从第一个位置开始依次遍历到倒数第二个数看看哪些点是转折点 然后记得把结束点位置加上 (就是+1)就行
第一个位置的left =0 right=nums[1]-[0] left*right<=0即可为转折点
(等于0是因为要把起始点算上)
循环进入第二个位置 left =第一个位置的right right=nums[2]-nums[1]
然后依次循环到倒数第二个位置
还有种特殊情况 nums.size() <2 直接返回 nums.size()
代码如下
class Solution
{
public:
int wiggleMaxLength(vector<int>& nums)
{
int n=nums.size();
int ret=0,left=0;
if(n<2) return n;
for(int i=0;i<n-1;i++)
{
int right=nums[i+1]-nums[i];
if(right==0) continue;
if(right*left<=0) ret++ ;
left=right;
}
return ret+1;
}
};