Data Structures22 min read

Monotonic Stack

Use monotonic stacks to solve next greater/smaller problems efficiently in linear time.

David Miller
October 10, 2025
3.1k100

Monotonic stack keeps elements in increasing or decreasing order.

Problem: next greater element

def next_greater(nums):
    st = []
    res = [-1]*len(nums)
    for i in range(len(nums)):
        while st and nums[i] > nums[st[-1]]:
            j = st.pop()
            res[j] = nums[i]
        st.append(i)
    return res

print(next_greater([2,1,2,4,3]))

Graph

flowchart LR
  A[Stack] --> B[Keep order]
  B --> C[Pop when broken]

Remember

  • stack keeps monotonic order
  • solves many range problems in O(n)
#Python#Advanced#Stack