一共三种状态,只有表现出折线图的节点才是符合摇摆队列的概念。
//贪心算法之状态机转换
int wiggleMaxLength(std::vector<int>& nums)
{
if (nums.size() == 1)
return 1;
if (nums.size() == 2)
return 2;
//状态
static const int BEGIN = 0;
static const int UP = 1;
static const int DOWN = 2;
int maxlength = 1;
int STATE = BEGIN;
for (int i = 1; i < nums.size();i++)
{
switch (STATE)
{
case BEGIN:
if (nums[i] > nums[i-1])
{
STATE = UP;
maxlength++;
}
else if (nums[i] < nums[i - 1])
{
STATE = DOWN;
maxlength++;
}
break;
case UP:
if (nums[i] < nums[i-1])
{
STATE = DOWN;
maxlength++;
}
break;
case DOWN:
if (nums[i] > nums[i - 1])
{
STATE = UP;
maxlength++;
}
break;
}
}
return maxlength;
}