【题目描述】
题目链接:点击这里
【思路分析】
由上述分析我们可以得到如下的贪心规律:
算法思路:有限状态自动机
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size() < 2) {
return nums.size(); //序列个数小于2时直接为摇摆序列
}
static const int BEGIN = 0; //扫描序列时的三种状态
static const int UP = 1;
static const int DOWN = 2;
int STATE = BEGIN;
int max_length = 1; //摇摆序列最大长度至少为1
for(int i=1;i<nums.size();i++) {//从第二个元素开始扫描
switch(STATE) {
case BEGIN:
if(nums[i-1]<nums[i]) {
STATE = UP;
max_length++;
}
else if(nums[i-1]>nums[i]) {
STATE = DOWN;
max_length++;
}
break;
case UP:
if(nums[i-1]>nums[i]) {
STATE = DOWN;
max_length++;
}
break;
case DOWN:
if(nums[i-1]<nums[i]) {
STATE = UP;
max_length++;
}
break;
}
}
return max_length;
}
};