From 9e84e933c263299e23a30ca422f027b447ca8a61 Mon Sep 17 00:00:00 2001 From: chayan das <110921638+Chayandas07@users.noreply.github.com> Date: Sun, 23 Jun 2024 12:43:54 +0530 Subject: [PATCH] Create 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit --- ... Absolute Diff Less Than or Equal to Limit | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit diff --git a/1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit b/1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit new file mode 100644 index 0000000..fd523df --- /dev/null +++ b/1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit @@ -0,0 +1,35 @@ +class Solution { +public: + int longestSubarray(vector& nums, int limit) { + deque increase; + deque decrease; + int max_len = 0; + int left = 0; + + for (int right = 0; right < nums.size(); ++right) { + while (!increase.empty() && nums[right] < increase.back()) { + increase.pop_back(); + } + increase.push_back(nums[right]); + + while (!decrease.empty() && nums[right] > decrease.back()) { + decrease.pop_back(); + } + decrease.push_back(nums[right]); + + while (decrease.front() - increase.front() > limit) { + if (nums[left] == decrease.front()) { + decrease.pop_front(); + } + if (nums[left] == increase.front()) { + increase.pop_front(); + } + ++left; + } + + max_len = std::max(max_len, right - left + 1); + } + + return max_len; + } +};