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=-1def next(self, price: int) -> int:while price>=self.stack[-1][1]:self.stack.pop()#此时找到大数了self.cur_day+=1self.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:
单调栈相关题单