leetcode 901. 股票价格跨度

  1. 题目链接 https://blog.csdn.net/fuxuemingzhu/article/details/82781059

  2. 题目描述

    1. 编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。

      今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。

      例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]

    2. 示例:

      输入:["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) 小于或等于今天的价格。
      
  3. 解题思路

    1. 维护一个递减栈,栈元素为(price, i) 其中price为股票价格, i为该股票价格的最大跨度。
    2. 读取当前的股票价格,在股票价格大于栈顶股票的条件下,不断出栈,并将栈顶元素的最大跨度加到当前股票最大跨度中取。
  4. 代码

    1. 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
      

       

  5. 参考 https://blog.csdn.net/fuxuemingzhu/article/details/82781059

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值