Monotonic Stack

Linear Helpers

Signal

Next greater/smaller, nearest larger to the right

Template

Keep an increasing/decreasing stack; each pop resolves an answer.

Worked example (1)

#9

Monotonic Stack

Monotonic Stack

For each day's temperature, report how many days until a warmer day (0 if none).

function dailyTemperatures(temperatures: number[]): number[] {
  const res = new Array<number>(temperatures.length).fill(0);
  const stack: number[] = []; // indices, temps decreasing down the stack
  for (let i = 0; i < temperatures.length; i++) {
    while (stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) {
      const j = stack.pop()!;
      res[j] = i - j;
    }
    stack.push(i);
  }
  return res;
}
Insight

Each index is pushed and popped once → O(n), not O(n²).