Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- using namespace std;
- void
- find_subsequence(const vector<int> &vec)
- {
- int maxIdx = 0, maxLen = 1;
- int dir = 0, pos = 0;
- for (int i = 0; i < vec.size(); ++i) {
- if (dir == 0) { // start of a new sequence
- if (i == vec.size() - 1)
- break;
- pos = i;
- if (vec[i] < vec[i + 1])
- dir = -1;
- else if (vec[i] == vec[i + 1])
- dir = 0;
- else dir = 1;
- } else if (dir == -1) {
- if (vec[i] > vec[i + 1])
- dir = 1;
- else { // end of the sequence
- if ((i - pos) > maxLen)
- {
- maxLen = i - pos;
- maxIdx = pos;
- }
- dir = 0;
- pos = --i; // on the iteration it will increase and start back at i
- }
- } else {
- if (vec[i] < vec[i + 1])
- dir = -1;
- else { // end of the sequence
- if ((i - pos) > maxLen)
- {
- maxLen = i - pos;
- maxIdx = pos;
- }
- dir = 0;
- pos = --i; // on the iteration it will increase and start back at i
- }
- }
- }
- for (int i = maxIdx, j = 0; j < maxLen; ++j, ++i) {
- cout << vec[i];
- if (j != maxLen - 1)
- cout << ", ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement