R3-栈和队列-单调栈
有个小思路:如果用栈的话,比如a,b在c前面,然后查找c的跨度的时候,往回搜索,如果b比c小,那就可以把b的跨度加到c上,否则,继续往回查找到a----(思路貌似是错的,如果是大于的情况,那还能成立好像)
优化:直接往回找,找到有一个a比c大即可停止,否则返回第几天即可。
class StockSpanner:
def __init__(self):
#无需判断栈为空的情况
self.stack=[(-1,inf)]
#第一个next调用算作第0天
self.cur_day=-1
def next(self, price: int) -> int:
while price>=self.stack[-1][1]:
self.stack.pop()
#此时找到大数了
self.cur_day+=1
self.stack.append((self.cur_day,price))
return self.cur_day-self.stack[-2][0]
# Your StockSpanner object will be instantiated and called as such:
# obj = StockSpanner()
# param_1 = obj.next(price)
ps:
单调栈相关题单