continuous-subarrays 1.0.0
Continuous Subarrays
Loading...
Searching...
No Matches
Solution Class Reference

Public Member Functions

long long continuousSubarrays (vector< int > &nums)
 

Detailed Description

Definition at line 5 of file main.cpp.

Member Function Documentation

◆ continuousSubarrays()

long long Solution::continuousSubarrays ( vector< int > &  nums)
inline

Definition at line 8 of file main.cpp.

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 }

Referenced by main().


The documentation for this class was generated from the following file: