BackhardSliding WindowGoldman SachsGoogle

Maximized Network Stream Analyzer 5 Solution

Problem Statement

You are monitoring a high-throughput network pipeline where data packets arrive sequentially, each carrying a throughput metric. The system is configured with a fixed observation window of size K. For every contiguous segment of K consecutive packets in the stream, the monitoring dashboard must display the peak throughput value observed within that specific window. Given an array nums representing the sequence of throughput metrics and an integer K representing the window size, return an array containing the maximum value for each sliding window position.

The input consists of an integer array nums of length N and an integer K. The output should be an array of length N - K + 1, where the i-th element corresponds to the maximum value in the subarray nums[i ... i + K - 1]. The solution must efficiently handle large input sizes, implying that a brute-force approach checking each window independently is insufficient for the upper constraint limits.

Example 1
Input
nums = [14, 2, 10, 3, 12, 7, 15, 4], K = 3
Output
[14, 10, 12, 12, 15, 15]

Explanation: Window 1: [14, 2, 10] -> max is 14. Window 2: [2, 10, 3] -> max is 10. Window 3: [10, 3, 12] -> max is 12. Window 4: [3, 12, 7] -> max is 12. Window 5: [12, 7, 15] -> max is 15. Window 6: [7, 15, 4] -> max is 15.

Example 2
Input
nums = [5, 5, 5, 5], K = 2
Output
[5, 5, 5]

Explanation: Window 1: [5, 5] -> max is 5. Window 2: [5, 5] -> max is 5. Window 3: [5, 5] -> max is 5. All values are identical, so the maximum remains constant across all windows.

Example 3
Input
nums = [9, 1, 8, 2, 7, 3, 6, 4, 5], K = 4
Output
[9, 8, 8, 7, 7, 6, 6]

Explanation: Window 1: [9, 1, 8, 2] -> max is 9. Window 2: [1, 8, 2, 7] -> max is 8. Window 3: [8, 2, 7, 3] -> max is 8. Window 4: [2, 7, 3, 6] -> max is 7. Window 5: [7, 3, 6, 4] -> max is 7. Window 6: [3, 6, 4, 5] -> max is 6. Window 7: [6, 4, 5] -> Wait, length is 9, K=4, so windows are indices 0-3, 1-4, 2-5, 3-6, 4-7, 5-8. Let's re-calculate. W1: [9,1,8,2]->9. W2: [1,8,2,7]->8. W3: [8,2,7,3]->8. W4: [2,7,3,6]->7. W5: [7,3,6,4]->7. W6: [3,6,4,5]->6. Output: [9, 8, 8, 7, 7, 6].

Constraints

  • 1 <= nums.length <= 10^5
  • 1 <= K <= nums.length
  • -10^9 <= nums[i] <= 10^9
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Maximized Network Stream Analyzer 5 — Problem Statement & Solution Guide

Sliding WindowHardSliding Window Maximum Deque
TimeO(N)
|
SpaceO(K)

Problem Description

You are monitoring a high-throughput network pipeline where data packets arrive sequentially, each carrying a throughput metric. The system is configured with a fixed observation window of size K. For every contiguous segment of K consecutive packets in the stream, the monitoring dashboard must display the peak throughput value observed within that specific window. Given an array nums representing the sequence of throughput metrics and an integer K representing the window size, return an array containing the maximum value for each sliding window position.

The input consists of an integer array nums of length N and an integer K. The output should be an array of length N - K + 1, where the i-th element corresponds to the maximum value in the subarray nums[i ... i + K - 1]. The solution must efficiently handle large input sizes, implying that a brute-force approach checking each window independently is insufficient for the upper constraint limits.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Maximized Network Stream Analyzer 5"

hard

WHY DOES IT MATTER?

Sliding window patterns appear in time‑series analysis, real‑time monitoring, and any scenario where you need aggregate information over a moving interval. Mastering the monotonic deque technique equips you to solve a whole class of problems that demand O(N) solutions instead of quadratic brute force.

OPTIMIZATION CHALLENGE

The key insight is that elements smaller than a newly arrived value can never become the maximum while the new element remains in the window, so they can be safely removed from consideration. This monotonic property reduces the problem from recomputing a max each slide to a constant‑time peek.

REAL-WORLD CONNECTION

Think of a network router that keeps track of the highest packet size seen in the last K milliseconds. As new packets arrive, the router discards the oldest measurement and updates the peak instantly—exactly what the deque does for array indices.

During an interview, implement the deque logic first on paper, then translate it directly to code. Keep the operations (pop front if out‑of‑range, pop back while smaller, push current index) in the exact order; mixing them leads to subtle bugs.

COMPLEXITY AT A GLANCE

⏱ Time:O(N)
💾 Space:O(K)

Core Theory — Why This Approach?

The sliding window maximum problem asks for the greatest element in every contiguous sub‑array of length K. A naïve solution recomputes the maximum for each window by scanning K elements, leading to O(N·K) time, which quickly becomes infeasible when N and K are on the order of 10⁵ or more. The optimal paradigm leverages the fact that windows overlap heavily: when the window slides one step to the right, only one element exits and one new element enters. By maintaining a data structure that can discard obsolete elements and keep the current maximum at its front, we can update the answer in constant amortized time per step.

The most common structure is a monotonic decreasing deque. Indices (or values) are stored such that their corresponding array values are in non‑increasing order from front to back. When a new element arrives, we pop from the back all smaller values because they can never become a maximum while the new larger element is in the window. The front of the deque always holds the index of the current window’s maximum; if that index falls out of the window range we pop it from the front. This yields an O(N) overall runtime with O(K) auxiliary space, which is optimal because each element is inserted and removed at most once.

Interview Questions on This Problem

Q1How would you compute the maximum of every sliding window of size K in an array of length N in linear time?

Use a monotonic decreasing deque to store indices of useful elements. For each index i, remove indices out of the current window from the front, pop smaller values from the back, then push i. The front of the deque is the maximum for the current window. This processes each element at most twice, giving O(N) time and O(K) space.

Q2Can you modify the sliding window maximum algorithm to also return the minimum of each window without increasing asymptotic complexity?

Yes. Maintain two deques: one decreasing for maximums and one increasing for minimums. Both support O(1) amortized updates per element, so the overall complexity remains O(N) time and O(K) space (two deques of size ≤K).

Q3Why does the monotonic deque solution guarantee amortized O(1) operations per element, and what would happen if you used a plain list instead?

Each array element is inserted into the deque exactly once and removed at most once—either when it slides out of the window or when a larger element causes it to be popped from the back. Hence total operations are bounded by 2N, giving amortized O(1) per step. A plain list would require O(K) time to remove arbitrary elements or to find the maximum, breaking the linear guarantee.

Examples

Example 1

Input

nums = [14, 2, 10, 3, 12, 7, 15, 4], K = 3

Output

[14, 10, 12, 12, 15, 15]

Explanation: Window 1: [14, 2, 10] -> max is 14. Window 2: [2, 10, 3] -> max is 10. Window 3: [10, 3, 12] -> max is 12. Window 4: [3, 12, 7] -> max is 12. Window 5: [12, 7, 15] -> max is 15. Window 6: [7, 15, 4] -> max is 15.

Example 2

Input

nums = [5, 5, 5, 5], K = 2

Output

[5, 5, 5]

Explanation: Window 1: [5, 5] -> max is 5. Window 2: [5, 5] -> max is 5. Window 3: [5, 5] -> max is 5. All values are identical, so the maximum remains constant across all windows.

Example 3

Input

nums = [9, 1, 8, 2, 7, 3, 6, 4, 5], K = 4

Output

[9, 8, 8, 7, 7, 6, 6]

Explanation: Window 1: [9, 1, 8, 2] -> max is 9. Window 2: [1, 8, 2, 7] -> max is 8. Window 3: [8, 2, 7, 3] -> max is 8. Window 4: [2, 7, 3, 6] -> max is 7. Window 5: [7, 3, 6, 4] -> max is 7. Window 6: [3, 6, 4, 5] -> max is 6. Window 7: [6, 4, 5] -> Wait, length is 9, K=4, so windows are indices 0-3, 1-4, 2-5, 3-6, 4-7, 5-8. Let's re-calculate. W1: [9,1,8,2]->9. W2: [1,8,2,7]->8. W3: [8,2,7,3]->8. W4: [2,7,3,6]->7. W5: [7,3,6,4]->7. W6: [3,6,4,5]->6. Output: [9, 8, 8, 7, 7, 6].

Constraints

  • 1 <= nums.length <= 10^5
  • 1 <= K <= nums.length
  • -10^9 <= nums[i] <= 10^9

Optimal Approach & Strategy

Use a monotonic decreasing deque to keep potential maxima, updating it in O(1) amortized time per element for an overall O(N) solution.

Brute Force Approach

For each window, scan all K elements to find the maximum, resulting in O(N·K) time.

Verified Code Solutions

JavaScript Solution
Time: O(N)
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var maxSlidingWindow = function(nums, k) {
    const dq = [];
    const result = [];
    for (let i = 0; i < nums.length; i++) {
        while (dq.length > 0 && nums[dq[dq.length - 1]] <= nums[i]) {
            dq.pop();
        }
        dq.push(i);
        if (dq[0] <= i - k) {
            dq.shift();
        }
        if (i >= k - 1) {
            result.push(nums[dq[0]]);
        }
    }
    return result;
};

Asked in Top Tech Interviews

Goldman SachsGoogle

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.