continuous-subarrays 1.0.0
Continuous Subarrays
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <bits/stdc++.h>
2
3using namespace std;
4
6{
7public:
8 long long continuousSubarrays(vector<int>& nums)
9 {
10 int n = (int)nums.size();
11 int left = 0;
12 long long count = 0;
13 deque<int> max_deque, min_deque;
14
15 for (int right = 0; right < n; ++right)
16 {
17 // add the current element to the max deque
18 while (!max_deque.empty() && nums[max_deque.back()] < nums[right])
19 max_deque.pop_back();
20 max_deque.push_back(right);
21
22 // add the current element to the min deque
23 while (!min_deque.empty() && nums[min_deque.back()] > nums[right])
24 min_deque.pop_back();
25 min_deque.push_back(right);
26
27 // shrink the window if the condition is violated
28 while (nums[max_deque.front()] - nums[min_deque.front()] > 2)
29 {
30 ++left;
31 if (!max_deque.empty() && max_deque.front() < left)
32 max_deque.pop_front();
33 if (!min_deque.empty() && min_deque.front() < left)
34 min_deque.pop_front();
35 }
36
37 // count valid subarrays ending at 'right'
38 count += (right - left + 1);
39 }
40 return count;
41 }
42};
43
44int main()
45{
46 vector<int> array = {5,4,2,4};
47 cout << Solution().continuousSubarrays(array) << endl;
48 return 0;
49}
long long continuousSubarrays(vector< int > &nums)
Definition main.cpp:8
int main()
Definition main.cpp:44