Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Wiggle Subsequence in C++
Suppose we have a sequence of numbers that is called a wiggle sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference may be either positive or negative. A sequence with less than two elements is trivially a wiggle sequence. So for example, [1,7,4,9,2,5] is a wiggle sequence because if you see, the differences (6,-3,5,-7,3) are alternately positive and negative. But, [1,4,7,2,5] and [1,7,4,5,5] are not wiggle sequences, the first one because its first two differences are positive and the second one because its last difference is zero.
So we have a sequence of integers, we have to find the length of the longest subsequence that is a wiggle sequence. A subsequence is obtained by deleting some number of elements (eventually, also zero) from the original sequence, leaving the remaining elements in their original order. So if the input is like [1,7,4,9,2,5], then the output will be 6. as the entire sequence is a wiggle sequence.
To solve this, we will follow these steps −
n := size of nums
if n is 0, then return 0
set up := 1 and down := 1
-
for i in range 1 to n – 1
if nums[i] > nums[i – 1], then up := down + 1
otherwise when nums[i] < nums[i – 1], then down := up + 1
return max of up and down
Example (C++)
Let us see the following implementation to get a better understanding −
#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));
}
Input
[1,7,4,9,2,5]
Output
6