C++中的摆动子序列
假设我们有一系列数字,如果连续数字之间的差严格地在正数和负数之间交替,则称之为摆动序列。第一个差可以是正数或负数。少于两个元素的序列微不足道地是一个摆动序列。例如,[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
设置 up := 1 和 down := 1
对于 i 从 1 到 n – 1 的范围
如果 nums[i] > nums[i – 1],则 up := down + 1
否则,当 nums[i] < nums[i – 1] 时,则 down := up + 1
返回 up 和 down 的最大值
示例 (C++)
让我们看看下面的实现,以便更好地理解:
#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
广告