Dynamic Programming21 sections · 916 units
Open in Course

Longest Subarray - Implementation

Two deques pattern

Maintain maxDeque (decreasing) and minDeque (increasing). Both store indices. On adding index rr: pop maxDeque back while arr[back]<arr[r]arr[back] < arr[r]. Pop minDeque back while arr[back]>arr[r]arr[back] > arr[r]. On shrinking from ll: if maxDeque front = ll, pop front. Same for minDeque. Check: arr[maxDeque.front()]arr[minDeque.front()]limitarr[maxDeque.front()] - arr[minDeque.front()] \leq limit. If not, increment ll and repeat. Both queues shrink from the front when elements leave the window. Track indices, not values.

Time complexity: O(n)O(n) since each element enters and leaves each deque at most once.

Space complexity: O(n)O(n) for the two deques.