假设我们有一个数字序列,如果连续数字之间的差严格在正负之间交替,则称为摆动序列。第一差异可以是正的或负的。少于两个元素的序列通常是摆动序列。因此,例如[1,7,4,9,2,5]是一个摆动序列,因为如果您看到的话,差异(6,-3,5,-7,3)交替为正和负。但是,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列,第一个是因为其前两个差为正,第二个是因为其最后差为零。
因此,我们有一个整数序列,我们必须找到最长的子序列即摆动序列的长度。通过从原始序列中删除一些元素(最终也为零)来获得子序列,而其余元素保持其原始顺序。因此,如果输入类似于[1,7,4,9,2,5],则输出将为6。因为整个序列是一个摆动序列。
为了解决这个问题,我们将遵循以下步骤-
n:= nums的大小
如果n为0,则返回0
设置:= 1和向下:= 1
当我在1到n – 1的范围内时
如果nums [i]> nums [i – 1],则向上:=向下+ 1
否则,当nums [i] <nums [i – 1]时,则向下:=向上+ 1
返回最大上下
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int wiggleMaxLength(vector<int>& nums) { int n = nums.size(); if(!n) return 0; int up = 1; int down = 1; for(int i = 1; i < n; i++){ if(nums[i] > nums[i - 1]){ up = down + 1; } else if(nums[i] < nums[i - 1]){ down = up + 1; } } return max(up, down); } }; main(){ Solution ob; vector<int> v = {1,7,4,9,2,5}; cout << (ob.wiggleMaxLength(v)); }
[1,7,4,9,2,5]
输出结果
6