Leetcode 901. Online Stock Span [Python]

暴力求解(TLE)

class StockSpanner:

    def __init__(self):
        self.record = []  

    def next(self, price: int) -> int:
        res = 0
        self.record.append(price)
        suarry = self.record[:]
        while suarry and suarry[-1] <= price:
            suarry.pop(-1)
            res += 1
        return res

然后,从stack特性出发,stack顶的元素在入栈前可以“搞定”多少之前的元素,例如,[100, 80, 60, 70], 入栈时,100-1 , 80- 1, 60-1,而70不仅搞定自己,还搞定60,于是乎70-2入栈,而60-1弹出,应为60被搞定,其与70的大小关系被70-2的2记录在内了,将来元素如果可以搞定70,一定可以搞定60,则只需要把70所对的2加到将来的较大(>= 70)的元素所对的数字上即可。

class StockSpanner:
    def __init__(self):
        self.record = []  
        
    def next(self, price: int) -> int:
        res = 1
        while self.record and self.record[-1][0] <= price:
            res += self.record.pop(-1)[1]
        self.record.append([price, res])
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值