mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
45 lines
1.6 KiB
Plaintext
45 lines
1.6 KiB
Plaintext
---
|
|||
|
|
title: '901. Online Stock Span'
|
||
|
|
description: Design an algorithm that collects daily price quotes for some stock and returns the span of that stock's price for the current day
|
||
|
|
icon: dot
|
||
|
|
topics:
|
||
|
|
- { name: "Stack", slug: "stack" }
|
||
|
|
- { name: "Design", slug: "design" }
|
||
|
|
- { name: "Monotonic Stack", slug: "monotonic-stack" }
|
||
|
|
- { name: "Data Stream", slug: "data-stream" }
|
||
|
|
issue: "https://github.com/prdlk/leetcode/issues/75"
|
||
|
|
sidebar:
|
||
|
|
label: 'Online Stock Span'
|
||
|
|
badge: 'Medium'
|
||
|
|
---
|
||
|
|
|
||
|
|
### Example 1:
|
||
|
|
- Input: ``
|
||
|
|
- Output: ``
|
||
|
|
- Explanation: Input ["StockSpanner", "next", "next", "next", "next", "next", "next", "next"] `[[]`, `[100]`, `[80]`, `[60]`, `[70]`, `[60]`, `[75]`, [85]] Output [null, `1`, `1`, `1`, `2`, `1`, `4`, 6] Explanation StockSpanner stockSpanner = new StockSpanner(); stockSpanner.next(100); // return `1` stockSpanner.next(80); // return `1` stockSpanner.next(60); // return `1` stockSpanner.next(70); // return `2` stockSpanner.next(60); // return `1` stockSpanner.next(75); // return `4`, because the last `4` prices (including today's `price` of `75`) were less than or equal to today's `price`. stockSpanner.next(85); // return `6`
|
||
|
|
|
||
|
|
### Constraints:
|
||
|
|
|
||
|
|
- `1 <= price <= 10^5`
|
||
|
|
- At most 10^4 calls will be made to next.
|
||
|
|
|
||
|
|
## Solution
|
||
|
|
|
||
|
|
```py
|
||
|
|
class StockSpanner:
|
||
|
|
def __init__(self):
|
||
|
|
self.stack = []
|
||
|
|
|
||
|
|
def next(self, price: int) -> int:
|
||
|
|
ans = 1
|
||
|
|
while self.stack and self.stack[-1][0] <= price:
|
||
|
|
ans += self.stack.pop()[1]
|
||
|
|
|
||
|
|
self.stack.append([price, ans])
|
||
|
|
return ans
|
||
|
|
|
||
|
|
|
||
|
|
# Your StockSpanner object will be instantiated and called as such:
|
||
|
|
# obj = StockSpanner()
|
||
|
|
# param_1 = obj.next(price)
|
||
|
|
```
|