0
点赞
收藏
分享

微信扫一扫

摆动 序列

承蒙不弃 2022-04-15 阅读 67
c++
#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;
}

 

举报

相关推荐

0 条评论