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; + } +};