暴力求解(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