Skip to content

Commit 6cb6dfe

Browse files
committed
Create 0901. 股票价格跨度.md
1 parent 4a21ffb commit 6cb6dfe

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Solutions/0901. 股票价格跨度.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
## [0901. 股票价格跨度](https://leetcode-cn.com/problems/online-stock-span/)
2+
3+
- 标签:栈、设计、数据流、单调栈
4+
- 难度:中等
5+
6+
## 题目大意
7+
8+
要求:编写一个 `StockSpanner` 类,用于收集某些股票的每日报价,并返回该股票当日价格的跨度。
9+
10+
- 今天股票价格的跨度:股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
11+
12+
例如:如果未来 7 天股票的价格是 `[100, 80, 60, 70, 60, 75, 85]`,那么股票跨度将是 `[1, 1, 1, 2, 1, 4, 6]`
13+
14+
## 解题思路
15+
16+
「求解小于或等于今天价格的最大连续日」等价于「求出左侧第一个比当前股票价格大的股票,并计算距离」。求出左侧第一个比当前股票价格大的股票我们可以使用「单调递减栈」来做。具体步骤如下:
17+
18+
- 初始化方法:初始化一个空栈,即 `self.stack = []`
19+
20+
- 求解今天股票价格的跨度:
21+
22+
- 初始化跨度 `span``1`
23+
- 如果今日股票价格 `price` 大于等于栈顶元素 `self.stack[-1][0]`,则:
24+
- 将其弹出,即 `top = self.stack.pop()`
25+
- 跨度累加上弹出栈顶元素的跨度,即 `span += top[1]`
26+
- 继续判断,直到遇到一个今日股票价格 `price` 小于栈顶元素的元素位置,再将 `[price, span]` 压入栈中。
27+
- 如果今日股票价格 `price` 小于栈顶元素 `self.stack[-1][0]`,则直接将 `[price, span]` 压入栈中。
28+
29+
- 最后输出今天股票价格的跨度 `span`
30+
31+
## 代码
32+
33+
```Python
34+
class StockSpanner:
35+
36+
def __init__(self):
37+
self.stack = []
38+
39+
def next(self, price: int) -> int:
40+
span = 1
41+
while self.stack and price >= self.stack[-1][0]:
42+
top = self.stack.pop()
43+
span += top[1]
44+
self.stack.append([price, span])
45+
return span
46+
```
47+

0 commit comments

Comments
 (0)