Bird
Raised Fist0
DSA Javaprogramming~5 mins

Sliding Window Maximum Using Deque in DSA Java - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Sliding Window Maximum Using Deque
O(n)
Understanding Time Complexity

We want to understand how the time needed to find the maximum in each sliding window grows as the input array gets bigger.

How does the algorithm handle larger arrays efficiently?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


public int[] maxSlidingWindow(int[] nums, int k) {
    Deque<Integer> dq = new LinkedList<>();
    int[] result = new int[nums.length - k + 1];
    for (int i = 0; i < nums.length; i++) {
        while (!dq.isEmpty() && dq.peekFirst() <= i - k) dq.pollFirst();
        while (!dq.isEmpty() && nums[dq.peekLast()] < nums[i]) dq.pollLast();
        dq.offerLast(i);
        if (i >= k - 1) result[i - k + 1] = nums[dq.peekFirst()];
    }
    return result;
}
    

This code finds the maximum value in every window of size k as it slides over the array.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: A single loop that goes through each element once.
  • How many times: Each element is added and removed from the deque at most once.
How Execution Grows With Input

As the input size grows, each element is processed a limited number of times, so the total work grows roughly in direct proportion to the input size.

Input Size (n)Approx. Operations
10About 20 operations (each element added and removed once)
100About 200 operations
1000About 2000 operations

Pattern observation: The operations grow linearly with input size, not faster.

Final Time Complexity

Time Complexity: O(n)

This means the time to complete the task grows directly in proportion to the number of elements.

Common Mistake

[X] Wrong: "Because there are nested while loops, the time complexity must be O(n²)."

[OK] Correct: Each element is added and removed from the deque only once, so the inner loops do not run for every element repeatedly.

Interview Connect

Understanding this linear time solution shows you can use data structures smartly to avoid repeated work, a key skill in many coding challenges.

Self-Check

"What if we used a simple array instead of a deque to track maximums? How would the time complexity change?"

Practice

(1/5)
1. What is the main purpose of using a deque in the Sliding Window Maximum problem?
easy
A. To reverse the array for easier processing
B. To sort the entire array before processing windows
C. To store the actual maximum values only
D. To store indices of elements in a way that helps find the maximum in O(1) time per window

Solution

  1. Step 1: Understand the role of deque

    A deque stores indices of elements in a way that the front always holds the index of the maximum element for the current window.
  2. Step 2: Why use indices and not values

    Storing indices allows easy removal of elements that are out of the current window range and helps maintain order efficiently.
  3. Final Answer:

    To store indices of elements in a way that helps find the maximum in O(1) time per window -> Option D
  4. Quick Check:

    Deque stores indices for max tracking [OK]
Hint: Deque holds indices for max, not values, for efficient window updates [OK]
Common Mistakes:
  • Storing values instead of indices
  • Using deque to sort the array
  • Ignoring window boundaries when removing elements
2. Which of the following Java code snippets correctly initializes a deque for sliding window maximum?
easy
A. Deque<int> dq = new ArrayDeque<>();
B. Deque<Integer> dq = new LinkedList<>();
C. Deque dq = new ArrayList<>();
D. Deque<Integer> dq = new Stack<>();

Solution

  1. Step 1: Identify correct deque initialization

    In Java, Deque is an interface and LinkedList implements it. So, Deque<Integer> dq = new LinkedList<>(); is valid.
  2. Step 2: Why other options are invalid

    Deque<int> dq = new ArrayDeque<>(); uses primitive int which is not allowed in generics. Deque dq = new ArrayList<>(); uses ArrayList which does not implement Deque. Deque<Integer> dq = new Stack<>(); uses Stack which is not a Deque.
  3. Final Answer:

    Deque<Integer> dq = new LinkedList<>(); -> Option B
  4. Quick Check:

    Use LinkedList for Deque in Java [OK]
Hint: Use LinkedList or ArrayDeque with Integer type for Deque [OK]
Common Mistakes:
  • Using primitive types in generics
  • Confusing ArrayList with Deque
  • Using Stack instead of Deque
3. What is the output of the sliding window maximum for array [1,3,-1,-3,5,3,6,7] with window size 3?
medium
A. [3, 3, 5, 5, 6, 7]
B. [1, 3, 5, 6, 7, 7]
C. [3, -1, 5, 3, 6, 7]
D. [3, 3, 3, 5, 6, 7]

Solution

  1. Step 1: Slide window and find max for each window

    Windows and max values: [1,3,-1] -> 3, [3,-1,-3] -> 3, [-1,-3,5] -> 5, [-3,5,3] -> 5, [5,3,6] -> 6, [3,6,7] -> 7.
  2. Step 2: Collect all max values in order

    The output array is [3, 3, 5, 5, 6, 7].
  3. Final Answer:

    [3, 3, 5, 5, 6, 7] -> Option A
  4. Quick Check:

    Max per window = [3,3,5,5,6,7] [OK]
Hint: Check max in each window of size k sequentially [OK]
Common Mistakes:
  • Confusing window boundaries
  • Taking max of wrong elements
  • Off-by-one errors in indexing
4. Identify the bug in this Java code snippet for sliding window maximum using deque:
Deque<Integer> dq = new LinkedList<>();
for (int i = 0; i < nums.length; i++) {
  while (!dq.isEmpty() && nums[dq.peekLast()] < nums[i]) {
    dq.pollLast();
  }
  dq.addLast(i);
  if (dq.peekFirst() <= i - k) {
    dq.pollFirst();
  }
  if (i >= k - 1) {
    result[i - k + 1] = nums[dq.peekFirst()];
  }
}
medium
A. The deque should store values, not indices
B. The loop should start from i = 1, not 0
C. The condition to remove indices out of window should be before adding new index
D. The result array is not initialized

Solution

  1. Step 1: Check order of removing out-of-window indices

    Indices out of the current window must be removed before adding the new index to maintain correct window elements.
  2. Step 2: Why current order causes error

    Removing out-of-window indices after adding new index can cause incorrect max calculation because the front may be outdated.
  3. Final Answer:

    The condition to remove indices out of window should be before adding new index -> Option C
  4. Quick Check:

    Remove old indices before adding new [OK]
Hint: Remove old indices before adding new to deque [OK]
Common Mistakes:
  • Removing out-of-window indices too late
  • Storing values instead of indices
  • Ignoring initialization of result array
5. Given an array nums = [4, 2, 12, 3, 8, 7, 9] and window size 4, which of the following is the correct sliding window maximum output using a deque approach?
hard
A. [12, 12, 12, 9]
B. [4, 12, 8, 9]
C. [4, 12, 12, 9]
D. [12, 12, 8, 7]

Solution

  1. Step 1: Slide window and find max for each window

    Windows and max values: [4,2,12,3] -> 12, [2,12,3,8] -> 12, [12,3,8,7] -> 12, [3,8,7,9] -> 9.
  2. Step 2: Collect max values in order

    The output array is [12, 12, 12, 9].
  3. Final Answer:

    [12, 12, 12, 9] -> Option A
  4. Quick Check:

    Max per window = [12,12,12,9] [OK]
Hint: Check max carefully; first window max is 12, not 4 [OK]
Common Mistakes:
  • Misreading first window max
  • Confusing window elements
  • Selecting output with wrong max values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard