class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
// 摇摆子序列
// 边界条件:当numsc长度小于2,nums本身就是摇摆序列
if (nums.size() < 2)
return nums.size();
// 三种状态
// 状态发生转换时,摇摆序列的长度增加
// 以下四种情况,摇摆序列长度增加
// BEGIN -> UP; BEGIN -> DOWN; UP -> DOWN; DOWN -> UP;
const int BEGIN = 0;
const int UP = 1;
const int DOWN = 2;
int STATE = BEGIN; // 初始状态为BEGIN
int max_length = 1; // 摇摆序列初始长度为1
// 从序列nums的第2个数(索引为1)开始,第一个数对应的状态为BEGIN,max_length=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])
{
// UP -> DOWN
STATE = DOWN;
max_length ++;
}
break;
case DOWN:
if (nums[i - 1] < nums[i])
{
// DOWN -> UP
STATE = UP;
max_length ++;
}
break;
}
}
return max_length;
}
};
int main()
{
int arr[] = {1, 17, 5, 10, 13, 15, 10, 5, 16, 8};
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(arr[i]);
}
Solution S;
int res = S.wiggleMaxLength(v);
cout << res << endl;
return 0;
}
Leetcode376、最长摇摆子序列长度
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。