惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
B
Blog
P
Proofpoint News Feed
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
有赞技术团队
有赞技术团队
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
H
Help Net Security
罗磊的独立博客
L
LangChain Blog
GbyAI
GbyAI
腾讯CDC
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Online Stock Span
Jaspreet singh · 2026-06-29 · via DEV Community

Jaspreet singh

Problem Statement

Design a data structure that collects daily stock prices and returns the stock span.

The stock span of today's price is the number of consecutive days (including today) where:

price <= today's price


Brute Force Intuition

In an interview, you can explain it like this:

For every new stock price, traverse backwards day by day until you find a price greater than today's price.

This repeatedly scans previous prices.

Complexity

  • Time Complexity: O(N) per query
  • Space Complexity: O(N)

Brute Force Code

class StockSpanner {

    List<Integer> prices;

    public StockSpanner() {
        prices = new ArrayList<>();
    }

    public int next(int price) {

        prices.add(price);

        int span = 1;

        for (int i = prices.size() - 2; i >= 0; i--) {

            if (prices.get(i) <= price) {
                span++;
            } else {
                break;
            }
        }

        return span;
    }
}


Moving Towards the Optimal Approach

Notice something important.

Suppose today's price is:

100

Previous prices:

60

70

80

These prices are smaller than 100.

Once we process 100:

60

70

80

can never become answers again.

So we remove them immediately.


Pattern Recognition

Whenever you see:

  • Previous Greater Element
  • Stock Span
  • Consecutive Greater/Smaller Elements

Think:

Monotonic Stack


Key Observation

Maintain a stack storing:

(price, span)

Whenever a new price arrives:

Remove every price:

<= Current Price

and add their spans.


Optimal Approach

For every new price:

span = 1

While:

Stack Top <= Current Price

span += previous span

Pop

Finally:

Push:

(Current Price, Span)


Optimal Java Solution

class StockSpanner {

    Stack<int[]> st;

    public StockSpanner() {

        st = new Stack<>();
    }

    public int next(int price) {

        int span = 1;

        while (!st.isEmpty() &&
               st.peek()[0] <= price) {

            span += st.pop()[1];
        }

        st.push(new int[]{price, span});

        return span;
    }
}


Dry Run

Prices

100

80

60

70

60

75

85


Price = 100

Stack:

(100,1)

Answer:

1


Price = 80

Stack:

100

80

Answer:

1


Price = 60

Answer:

1


Price = 70

Remove:

60

Span:

1 + 1 = 2

Push:

(70,2)

Answer:

2


Price = 75

Remove:

70

60

Span:

4


Price = 85

Remove:

75

80

Span:

6

Final Output:

[1,1,1,2,1,4,6]


Why Monotonic Stack Works?

Every stock price is:

Pushed Once

Popped Once

Hence:

Overall Complexity

=

O(N)

instead of O(N²).


Complexity Analysis

Metric Complexity
Time Complexity O(1) Amortized
Space Complexity O(N)

Interview One-Liner

Maintain a monotonic decreasing stack storing (price, span) so smaller prices are merged into the current span.


Pattern Learned

Previous Greater Element

+

Consecutive Count

↓

Monotonic Stack

Similar Problems

  • Online Stock Span
  • Next Greater Element
  • Daily Temperatures
  • Largest Rectangle in Histogram
  • Sum of Subarray Minimums

Memory Trick

Think:

Current Price

↓

Remove Smaller Prices

↓

Add Their Spans

↓

Push (Price, Span)

Mental Model

Need Previous Greater

↓

Monotonic Decreasing Stack

↓

Store Price + Span

Whenever you hear:

"Stock Span"

your brain should immediately think:

Previous Greater Element + Monotonic Stack