From 1fd124028eb34b34b2cb8f53370e71633f0e9f60 Mon Sep 17 00:00:00 2001 From: chayan das Date: Sun, 28 Sep 2025 23:38:41 +0530 Subject: [PATCH] Create 28 September Longest Bounded-Difference Subarray --- ...ember Longest Bounded-Difference Subarray | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 28 September Longest Bounded-Difference Subarray diff --git a/28 September Longest Bounded-Difference Subarray b/28 September Longest Bounded-Difference Subarray new file mode 100644 index 0000000..17c147e --- /dev/null +++ b/28 September Longest Bounded-Difference Subarray @@ -0,0 +1,35 @@ +class Solution { + public: + vector longestSubarray(vector& arr, int x) { + int n = arr.size(); + deque minDq, maxDq; // store indices + int l = 0, bestLen = 0, bestStart = 0; + + for (int r = 0; r < n; r++) { + // Maintain min deque (increasing order) + while (!minDq.empty() && arr[minDq.back()] >= arr[r]) + minDq.pop_back(); + minDq.push_back(r); + + // Maintain max deque (decreasing order) + while (!maxDq.empty() && arr[maxDq.back()] <= arr[r]) + maxDq.pop_back(); + maxDq.push_back(r); + + // If window invalid, shrink from left + while (arr[maxDq.front()] - arr[minDq.front()] > x) { + if (minDq.front() == l) minDq.pop_front(); + if (maxDq.front() == l) maxDq.pop_front(); + l++; + } + + // Update best window + if (r - l + 1 > bestLen) { + bestLen = r - l + 1; + bestStart = l; + } + } + + return vector(arr.begin() + bestStart, arr.begin() + bestStart + bestLen); + } +};