-
题目链接 https://blog.csdn.net/fuxuemingzhu/article/details/82781059
-
题目描述
-
编写一个
StockSpanner
类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
例如,如果未来7天股票的价格是
[100, 80, 60, 70, 60, 75, 85]
,那么股票跨度将是[1, 1, 1, 2, 1, 4, 6]
。 -
示例:
输入:["StockSpanner","next","next","next","next","next","next","next"], [[],[100],[80],[60],[70],[60],[75],[85]] 输出:[null,1,1,1,2,1,4,6] 解释: 首先,初始化 S = StockSpanner(),然后: S.next(100) 被调用并返回 1, S.next(80) 被调用并返回 1, S.next(60) 被调用并返回 1, S.next(70) 被调用并返回 2, S.next(60) 被调用并返回 1, S.next(75) 被调用并返回 4, S.next(85) 被调用并返回 6。 注意 (例如) S.next(75) 返回 4,因为截至今天的最后 4 个价格 (包括今天的价格 75) 小于或等于今天的价格。
-
-
解题思路
- 维护一个递减栈,栈元素为(price, i) 其中price为股票价格, i为该股票价格的最大跨度。
- 读取当前的股票价格,在股票价格大于栈顶股票的条件下,不断出栈,并将栈顶元素的最大跨度加到当前股票最大跨度中取。
-
代码
- python
class StockSpanner: def __init__(self): self.s = [] def next(self, price: int) -> int: res = 1 while self.s and self.s[-1][0] <= price: res += self.s.pop()[-1] self.s.append((price, res)) return res
- python
-
参考 https://blog.csdn.net/fuxuemingzhu/article/details/82781059
leetcode 901. 股票价格跨度
最新推荐文章于 2022-10-21 18:57:15 发布