BackmediumLinked ListMicrosoftRazorpay

Monotonic Node Cluster Solution

Problem Statement

Given an array or sequence of length N representing numerical values or system metrics, compute the monotonic node cluster according to the target algorithm rules.

Example 1
Input
[1, 2, 3, 4, 5]
Output
15

Explanation: Step-by-step: with input [1, 2, 3, 4, 5], we find the monotonic node cluster by iterating through the array and summing up the elements in the cluster. The cluster starts at index 0 and ends at index 4, giving output 15.

Example 2
Input
[5, 4, 3, 2, 1]
Output
15

Explanation: Step-by-step: with input [5, 4, 3, 2, 1], we find the monotonic node cluster by iterating through the array and summing up the elements in the cluster. The cluster starts at index 0 and ends at index 4, giving output 15.

Constraints

  • 1 <= N <= 10^5
  • -10^9 <= arr[i] <= 10^9
  • Time Complexity expected: O(N) or O(N log N)
  • Space Complexity expected: O(1) or O(N)
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

Monotonic Node Cluster — Problem Statement & Solution Guide

Linked ListMediumFloyd Cycle Detection
TimeO(N)
|
SpaceO(1)

Problem Description

Given an array or sequence of length N representing numerical values or system metrics, compute the monotonic node cluster according to the target algorithm rules.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Monotonic Node Cluster"

medium

WHY DOES IT MATTER?

Monotonic patterns appear in time‑series analysis, stock price trends, and system health metrics. Detecting contiguous monotonic clusters enables quick anomaly detection, trend summarization, and efficient compression of large data streams.

OPTIMIZATION CHALLENGE

The breakthrough is realizing that a break in monotonicity is a hard boundary – you never need to look back beyond the last break. This eliminates the need for nested loops or expensive binary searches, collapsing the problem to a single linear scan.

REAL-WORLD CONNECTION

Think of a server farm where CPU utilization rises steadily during a batch job and then falls. The rising phase and falling phase are monotonic clusters; recognizing them lets autoscalers provision resources just in time, avoiding over‑provisioning.

When coding, keep two variables: currentLength and currentDirection (increasing, decreasing, or undefined). Reset currentLength only when direction flips; this tiny state machine makes the implementation both fast and easy to debug.

COMPLEXITY AT A GLANCE

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

Core Theory — Why This Approach?

The Monotonic Node Cluster problem asks you to identify maximal contiguous segments of an input sequence where the values are either non‑decreasing or non‑increasing. A naive solution would examine every possible sub‑array, checking monotonicity in O(N) time per sub‑array, leading to O(N³) overall – infeasible for N up to 10⁵ or larger. The optimal paradigm leverages the fact that monotonicity is a local property: once a break in order is encountered, the current cluster ends. By scanning the array once while maintaining the direction of the current trend, we can close a cluster and start a new one in constant time per element. This yields a linear‑time solution that also uses O(1) auxiliary space, which is the theoretical lower bound for a single‑pass scan of an unsorted sequence.

Interview Questions on This Problem

Q1How would you modify the linear scan to return both the longest non‑decreasing and the longest non‑increasing clusters in a single pass?

Maintain two counters: one for the current non‑decreasing length and one for the current non‑increasing length. Update each when the next element respects the respective direction; otherwise reset the counter. Track the maximum length and start index for each direction separately, yielding both answers after one traversal.

Q2Explain how a monotonic stack can be used to compute, for each index, the size of the maximal monotonic cluster that includes that index.

Push indices onto a stack while the values respect the monotonic direction (e.g., non‑decreasing). When a violation occurs, pop until the stack regains monotonicity; the distance between the current index and the new stack top gives the left boundary of the cluster. Perform a second pass from right to left for the right boundary, then combine both to obtain the full cluster size for each index.

Q3In a distributed monitoring system, metrics arrive as a stream. How would you adapt the monotonic cluster algorithm to work with a sliding window of size W?

Use a deque to store candidate elements for the current monotonic direction, similar to the sliding‑window maximum problem. As the window slides, evict elements that fall out of the window and adjust the direction counters accordingly. This preserves O(1) amortized update per new metric while always exposing the longest monotonic cluster within the current window.

Examples

Example 1

Input

[1, 2, 3, 4, 5]

Output

15

Explanation: Step-by-step: with input [1, 2, 3, 4, 5], we find the monotonic node cluster by iterating through the array and summing up the elements in the cluster. The cluster starts at index 0 and ends at index 4, giving output 15.

Example 2

Input

[5, 4, 3, 2, 1]

Output

15

Explanation: Step-by-step: with input [5, 4, 3, 2, 1], we find the monotonic node cluster by iterating through the array and summing up the elements in the cluster. The cluster starts at index 0 and ends at index 4, giving output 15.

Constraints

  • 1 <= N <= 10^5
  • -10^9 <= arr[i] <= 10^9
  • Time Complexity expected: O(N) or O(N log N)
  • Space Complexity expected: O(1) or O(N)

Optimal Approach & Strategy

Perform a single left‑to‑right pass, maintaining the current monotonic direction and length, resetting only when the direction flips, achieving O(N) time and O(1) extra space.

Brute Force Approach

Check every possible sub‑array, verifying monotonicity by scanning each sub‑array, which costs O(N³) in the worst case.

Verified Code Solutions

JavaScript Solution
Time: O(N)
function monotonicCluster(nums) {
      if (nums.length === 0) return 0;
      let clusterSum = nums[0];
      let isIncreasing = nums[0] <= nums[1];
      for (let i = 1; i < nums.length; i++) {
         if ((isIncreasing && nums[i] >= nums[i - 1]) || (!isIncreasing && nums[i] <= nums[i - 1])) {
            clusterSum += nums[i];
         } else {
            break;
         }
      }
      return clusterSum;
   }

Asked in Top Tech Interviews

MicrosoftRazorpay

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.