3
public int longestSubarray(int[] nums, int limit) {5
Deque<Integer> increasing = new LinkedList<Integer>(); // To keep track of Max_value index6
Deque<Integer> decreasing = new LinkedList<Integer>(); // To keep track of Min_value index12
while (j < nums.length) {14
while (!increasing.isEmpty() && nums[increasing.peekLast()] >= nums[j]) {15
increasing.pollLast();20
while (!decreasing.isEmpty() && nums[decreasing.peekLast()] <= nums[j]) {21
decreasing.pollLast();26
int max_val = nums[decreasing.peekFirst()];27
int min_val = nums[increasing.peekFirst()];29
if (max_val - min_val <= limit) {30
max_length = Math.max(max_length, j - i + 1);33
// If maximum absolute diff > limit , then remove from dequeue and increase i34
while (i <= j && nums[decreasing.peekFirst()] - nums[increasing.peekFirst()] > limit) {36
if (!increasing.isEmpty() && increasing.peekFirst() == i) {37
increasing.pollFirst();40
if (!decreasing.isEmpty() && decreasing.peekFirst() == i) {41
decreasing.pollFirst();