Skip to content

Commit 1fd1240

Browse files
authored
Create 28 September Longest Bounded-Difference Subarray
1 parent cb5302e commit 1fd1240

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution {
2+
public:
3+
vector<int> longestSubarray(vector<int>& arr, int x) {
4+
int n = arr.size();
5+
deque<int> minDq, maxDq; // store indices
6+
int l = 0, bestLen = 0, bestStart = 0;
7+
8+
for (int r = 0; r < n; r++) {
9+
// Maintain min deque (increasing order)
10+
while (!minDq.empty() && arr[minDq.back()] >= arr[r])
11+
minDq.pop_back();
12+
minDq.push_back(r);
13+
14+
// Maintain max deque (decreasing order)
15+
while (!maxDq.empty() && arr[maxDq.back()] <= arr[r])
16+
maxDq.pop_back();
17+
maxDq.push_back(r);
18+
19+
// If window invalid, shrink from left
20+
while (arr[maxDq.front()] - arr[minDq.front()] > x) {
21+
if (minDq.front() == l) minDq.pop_front();
22+
if (maxDq.front() == l) maxDq.pop_front();
23+
l++;
24+
}
25+
26+
// Update best window
27+
if (r - l + 1 > bestLen) {
28+
bestLen = r - l + 1;
29+
bestStart = l;
30+
}
31+
}
32+
33+
return vector<int>(arr.begin() + bestStart, arr.begin() + bestStart + bestLen);
34+
}
35+
};

0 commit comments

Comments
 (0)