Monotonic Stack & Queue

Data Structures

Nearest greater/smaller elements and range extremums in linear time

86 problems·2 Easy·50 Medium·34 Hard
Pattern Study Guide & Cheat Sheet

Maintain a stack with strictly increasing or decreasing elements to find the Nearest Greater or Smaller Element for all elements in O(N) total time.

Core Invariant: Every element is pushed once and popped at most once. Pushing an element pops all elements that violate monotonicity, meaning the incoming element IS their Next Greater/Smaller answer!

Recognize it (Keywords & Signals)
  • Find next greater / next smaller element for each position
  • Previous greater element / stock span problems
  • Largest rectangle in histogram
  • Daily temperatures (number of days until a warmer day)
  • Trapping rain water (horizontal bounded bars)
When NOT to use

Need arbitrary lookups across non-monotonic boundaries or dynamic insertions with k-th queries (use Heap or BST).

How to solve (Step-by-step)
  1. 1.Initialize `stack = []` (store indices to compute distances) and `res = [-1] * n`.
  2. 2.Iterate `i` from 0 to n - 1 with current value `x = nums[i]`.
  3. 3.While stack is non-empty and `nums[stack[-1]] < x` (for next greater): pop `idx = stack.pop()`, record `res[idx] = x`.
  4. 4.Push current index `i` onto stack.
  5. 5.Elements left in stack have no next greater element (remain -1).
Watch for (Interview Traps)
  • Storing values instead of indices (indices allow both value lookup and distance calculation)
  • Confusion over `<` vs `<=` (decide whether equal values should pop or remain based on problem statement)
  • Circular arrays: forget to iterate `2 * n` with index `i % n`
Next Greater Element (Monotonic Decreasing Stack)
def next_greater_elements(nums: list[int]) -> list[int]:
    n = len(nums)
    res = [-1] * n
    stack = []  # Stores indices of unresolved elements
    
    for i in range(n):
        # Pop all elements smaller than current element nums[i]
        while stack and nums[i] > nums[stack[-1]]:
            popped_idx = stack.pop()
            res[popped_idx] = nums[i]  # nums[i] is the next greater element!
            
        stack.append(i)
        
    return res
Cost
O(n) amortized (each index pushed and popped at most once) · O(n) for stack and result array (Avoids O(n^2) nested search for adjacent extremes.)
Canonical problems
#739 Daily Temperatures: Monotonic decreasing stack tracks days until warmer temperature
#84 Largest Rectangle in Histogram: Monotonic increasing stack finds left/right smaller boundaries
#42 Trapping Rain Water: Stack stores decreasing valley bars until bounded by higher right wall
#907 Sum of Subarray Minimums: Find left and right strictly smaller elements for each value
Hard·81 companies·Max freq 100%·Acc 67.7%
ThousandEyesCadenceX+78
Hard·52 companies·Max freq 100%·Acc 49.0%
CitadelblinkitLINE+49
Medium·35 companies·Max freq 100%·Acc 0.5%
QualtricsDream11Roku+32
Medium·34 companies·Max freq 100%·Acc 68.9%
BrowserStackSonatusAirwallex+31
Hard·32 companies·Max freq 92%·Acc 50.3%
NeetCode 150NeetCode 150thoughtspot+29
Medium·23 companies·Max freq 100%·Acc 37.2%
park+SnapPhonePe+20
Medium·18 companies·Max freq 80%·Acc 68.7%
SigmoidZeta GlobalServiceNow+15
Hard·18 companies·Max freq 77%·Acc 73.3%
CitigroupWaymoCitigroup+15
Medium·17 companies·Max freq 100%·Acc 57.8%
UberMolocoPhonePe+14
Easy·17 companies·Max freq 82%·Acc 76.5%
SwiggyBloombergAmazon+14
Hard·16 companies·Max freq 64%·Acc 0.6%
Zeta GlobalArcesiumSprinklr+13
Medium·15 companies·Max freq 88%·Acc 38.8%
ZS AssociatesAvitoSprinklr+12
Medium·14 companies·Max freq 100%·Acc 0.5%
IncreffFactSetByteDance+11
Medium·13 companies·Max freq 100%·Acc 55.4%
NutanixNeetCode 150NeetCode 150+10
Medium·12 companies·Max freq 90%·Acc 50.7%
Two SigmaMakeMyTripSprinklr+9
Hard·11 companies·Max freq 88%·Acc 69.2%
MathWorksChubbMorgan Stanley+8
Medium·11 companies·Max freq 65%·Acc 35.4%
DoorDashMitsogoWalmart Labs+8
Medium·9 companies·Max freq 100%·Acc 38.4%
LiveRampeBayTikTok+6
Medium·9 companies·Max freq 100%·Acc 63.7%
FactSetByteDancePaytm+6
Medium·9 companies·Max freq 97%·Acc 51.4%
razorpayTekionDE Shaw+6
Medium·9 companies·Max freq 88%·Acc 61.5%
ChubbDE ShawPhonePe+6
Medium·9 companies·Max freq 88%·Acc 55.9%
ZeptoAccentureJosh Technology+6
Hard·8 companies·Max freq 100%·Acc 32.9%
DevRevPhonePeGoldman Sachs+5
Hard·8 companies·Max freq 67%·Acc 78.2%
Dream11GoogleSprinklr+5
Hard·8 companies·Max freq 64%·Acc 0.4%
AccoliteFlipkartDE Shaw+5
Medium·8 companies·Max freq 54%·Acc 34.9%
SprinklrDoorDashAmazon+5
Medium·8 companies·Max freq 50%·Acc 69.4%
AmazonBloombergMicrosoft+5
Easy·7 companies·Max freq 100%·Acc 84.2%
Dream11UberMicrosoft+4
Medium·7 companies·Max freq 100%·Acc 46.5%
AQR Capital ManagementVisaMicrosoft+4
Medium·7 companies·Max freq 77%·Acc 64.2%
PoshmarkGoogleApple+4
Medium·6 companies·Max freq 38%·Acc 84.4%
AmazonSalesforceMeta+3
Medium·5 companies·Max freq 100%·Acc 51.8%
ZenefitsExpediaSalesforce+2
Medium·5 companies·Max freq 88%·Acc 80.9%
MetaAndurilAmazon+2
Hard·5 companies·Max freq 88%·Acc 50.0%
Walmart LabsAmazonMeta+2
Hard·5 companies·Max freq 75%·Acc 52.4%
InfosysMetaAmazon+2
Medium·5 companies·Max freq 38%·Acc 58.0%
GoogleAmazonBloomberg+2
Hard·5 companies·Max freq 28%·Acc 55.0%
SalesforceGoogleAmazon+2
Hard·4 companies·Max freq 100%·Acc 45.8%
instabaseTikTokGoogle+1
Medium·4 companies·Max freq 88%·Acc 67.9%
MathWorksPhonePeBloomberg+1
Medium·4 companies·Max freq 50%·Acc 40.6%
UberInfosysAmazon+1
Medium·4 companies·Max freq 38%·Acc 64.5%
MicrosoftBloombergAmazon+1
Medium·4 companies·Max freq 27%·Acc 86.4%
MicrosoftMetaGoogle+1
Medium·4 companies·Max freq 26%·Acc 71.0%
GoogleBloombergAmazon+1
Medium·4 companies·Max freq 25%·Acc 75.0%
AmazonMicrosoftGoogle+1
Medium·4 companies·Max freq 18%·Acc 53.1%
BloombergMetaAmazon+1
Medium·4 companies·Max freq 13%·Acc 58.5%
MetaAmazonMicrosoft+1
Hard·3 companies·Max freq 100%·Acc 24.0%
HuaweiWorldQuantDE Shaw
Hard·3 companies·Max freq 89%·Acc 25.5%
HarnessBNY MellonMicrosoft
Medium·3 companies·Max freq 75%·Acc 37.9%
InfosysNetAppGoogle
Hard·3 companies·Max freq 65%·Acc 41.3%
SprinklrGoogleAmazon
Hard·3 companies·Max freq 29%·Acc 41.8%
MicrosoftAmazonGoogle
Medium·3 companies·Max freq 28%·Acc 63.8%
UberGoogleMicrosoft
Hard·3 companies·Max freq 25%·Acc 58.2%
GoogleMicrosoftAmazon
Hard·2 companies·Max freq 100%·Acc 20.7%
PaytmMeta
Hard·2 companies·Max freq 100%·Acc 56.5%
Akuna CapitalGoogle
Hard·2 companies·Max freq 67%·Acc 38.8%
InMobiAmazon
Medium·2 companies·Max freq 38%·Acc 48.5%
AmazonGoogle
Medium·2 companies·Max freq 28%·Acc 37.5%
SalesforceGoogle
Hard·2 companies·Max freq 25%·Acc 0.3%
GoogleAmazon
Medium·2 companies·Max freq 25%·Acc 53.2%
GoogleUber
Hard·2 companies·Max freq 25%·Acc 33.7%
LinkedInAmazon
Hard·2 companies·Max freq 25%·Acc 64.2%
GoogleBloomberg
Hard·2 companies·Max freq 25%·Acc 24.9%
GoogleMicrosoft
Hard·2 companies·Max freq 13%·Acc 53.6%
MetaGoogle
Hard·1 companies·Max freq 100%·Acc 39.9%
Nutanix
Medium·1 companies·Max freq 100%·Acc 77.1%
Zluri
Medium·1 companies·Max freq 100%·Acc 59.8%
Zluri
Hard·1 companies·Max freq 100%·Acc 80.1%
Hulu
Hard·1 companies·Max freq 100%·Acc 40.0%
Deutsche Bank
Medium·1 companies·Max freq 63%·Acc 36.8%
Salesforce
Medium·1 companies·Max freq 63%·Acc 44.7%
Salesforce
Medium·1 companies·Max freq 50%·Acc 47.4%
Uber
Hard·1 companies·Max freq 40%·Acc 29.6%
Amazon
Hard·1 companies·Max freq 38%·Acc 39.5%
Amazon
Medium·1 companies·Max freq 25%·Acc 25.0%
Meta
Medium·1 companies·Max freq 25%·Acc 45.9%
Amazon
Medium·1 companies·Max freq 25%·Acc 48.2%
Amazon
Medium·1 companies·Max freq 25%·Acc 75.3%
Amazon
Medium·1 companies·Max freq 25%·Acc 44.6%
Google
Hard·1 companies·Max freq 25%·Acc 45.1%
Google
Hard·1 companies·Max freq 25%·Acc 38.0%
Google
Medium·1 companies·Max freq 25%·Acc 70.0%
Google
Medium·1 companies·Max freq 16%·Acc 61.5%
Amazon
Hard·1 companies·Max freq 13%·Acc 42.3%
Meta
Medium·1 companies·Max freq 13%·Acc 57.5%
Google
Medium·1 companies·Max freq 13%·Acc 23.7%
Google
Showing 86 of 86 problems in Monotonic Stack & QueueFiltered: All Companies