#include <vector>
#include <iostream>
using namespace std;
int wiggleMaxLength(vector<int> nums)
{
//题目其实就是为了找一串数据如果画成折线图,记录拐点元素的元素个数
if (nums.size() <= 1) return nums.size();
//0表示初始状态,摆动序列长度为1的时候; 1表示正在上坡,即摆动序列正在向上摆; -1表示正在下坡,即摆动序列正在向下摆
int currentState = 0;
//摆动序列初始长度为1
int length = 1;
//从序列第二个元素开始遍历,看当前元素与他的前一个元素组成的状态是否与摆动状态不同,如果相反,则摆动序列长度加一
for (int i = 1; i < nums.size(); i++)
{
if (nums[i] > nums[i-1])//这两个数据组成上升状态
{
if (currentState != 1)//如果之前的状态不是上升状态
{
length++;
currentState = 1;//现在的状态更新为上升状态
}
}
else if (nums[i] < nums[i - 1])
{
if (currentState != -1)//如果之前的状态不是下降状态
{
length++;
currentState = -1;//现在的状态更新为下降状态
}
}
}
return length;
}
int main()
{
vector<int> nums1 = { 1, 7, 4, 9, 2, 5 };
cout << wiggleMaxLength(nums1) << endl;
vector<int> nums2 = { 1, 17, 5, 10, 13, 15, 10, 5, 16, 8};
cout << wiggleMaxLength(nums2) << endl;
vector<int> nums3 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
cout << wiggleMaxLength(nums3) << endl;
}