Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 1.26 KB

File metadata and controls

54 lines (38 loc) · 1.26 KB

Longest Continuous Subarray

Problem Link

https://leetcode.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/


Pattern

  • Sliding Window

Approach

Use deques or multiset to track min/max in window; shrink if difference exceeds limit.


Time Complexity

O(n)

Space Complexity

O(n)


Java Solution

import java.util.*;
class Solution {
    public int longestSubarray(int[] nums, int limit) {
        Deque<Integer> minDeque = new ArrayDeque<>(), maxDeque = new ArrayDeque<>();
        int left = 0, ans = 0;
        for (int right = 0; right < nums.length; right++) {
            while (!minDeque.isEmpty() && minDeque.peekLast() > nums[right]) minDeque.pollLast();
            while (!maxDeque.isEmpty() && maxDeque.peekLast() < nums[right]) maxDeque.pollLast();
            minDeque.addLast(nums[right]);
            maxDeque.addLast(nums[right]);
            while (maxDeque.peekFirst() - minDeque.peekFirst() > limit) {
                if (nums[left] == minDeque.peekFirst()) minDeque.pollFirst();
                if (nums[left] == maxDeque.peekFirst()) maxDeque.pollFirst();
                left++;
            }
            ans = Math.max(ans, right - left + 1);
        }
        return ans;
    }
}