摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。
用两个值记录趋势变化,而且只需要序列长度
class Solution
{
public:
int wiggleMaxLength(vector<int>& nums)
{
int nSize = nums.size();
if (nSize < 2)
{
return nSize;
}
//记录初始是上升还是下降
int nPrevdiff = nums[1] - nums[0];
//有趋势ret就是2,没有趋势,即前两个数字相同
int nRes = nPrevdiff != 0 ? 2 : 1;
int nDiff = 0;
for (int i = 2; i < nSize; i++)
{
//当前的变化趋势
nDiff = nums[i] - nums[i - 1];
//符合条件,一段上市,一段下降
if ((nDiff > 0 && nPrevdiff <= 0) || (nDiff < 0 && nPrevdiff >= 0))
{
//记录趋势,结果+1
nRes++;
nPrevdiff = nDiff;
}
}
return nRes;
}
};