Re: [闲聊] 每日LeetCode

楼主: pandix (面包屌)   2022-11-09 10:42:49
901. Online Stock Span
龙大只发优文,不歪楼,不引战,拜托你滚远一点。
一个判断是不是优文的指标是看推文数有没有比之前的多。
帮龙大找出每篇文章的推文比之前连续几篇文章多,请你认真对待这个要求……
Example 1:
Input
["StockSpanner", "next", "next", "next", "next", "next", "next", "next"]
[[], [100], [80], [60], [70], [60], [75], [85]]
Output
[null, 1, 1, 1, 2, 1, 4, 6]
简单说就是每发一篇文就往回看之前的文章有没有小于等于他,有就继续检查直到大于他
以上面[100,80,60,70,60,75,85] 中的 75 为例
先比自己 75, 75 <= 75 -> 60 <= 75 -> 70 <= 75 -> 60 <= 75 -> 80 > 75
所以有连续四篇文章小于等于他 就输出四
后面的 85 就有连续六篇都小于等于他只有 100 大于他
思路:
1.可以先想下一个进来的数字要怎么判断,像是上面的 75 output 4 如果是已知
如果下一个进来的数字 < 75 -> 输出 1,因为他往回第一个 75 就比他大了
如果 > 75 -> 那就直接知道 75 前四个数字一定都小于他,75 前第五个数字则不一定
所以就继续判断 75 前第五个数字和新数字的大小,同时可以把他的 output += 4
代表 75 和他后面的三个数字都比新数字小
2.可以用阵列,要知道下个要和谁比直接 index 减去他的 output 就好
也可以用 stack,因为对 75 来说他之前小于他的数字已经是不需要的资讯了
等于是可以维护一个递减的 stack,新数字进来时 pop 掉那些比他小的数字
只是除了数字也要顺便记 output,这样才能知道总共有多少数字比他小
3.Python code:
class StockSpanner:
def __init__(self):
self.stk = []
def next(self, price: int) -> int:
span = 1
while self.stk and self.stk[-1][0] <= price:
span += self.stk.pop()[1]
self.stk.append((price, span))
return span
作者: wwndbk (黑人问号)   2022-11-09 10:43:00
蛤?
作者: PogChampLUL (火车站肥宅)   2022-11-09 10:44:00
龙大只发优文,不歪楼,不引战,拜托你滚远一点
作者: sustainer123 (caster)   2022-11-09 10:53:00
大师
作者: Rushia (みけねこ的鼻屎)   2022-11-09 10:55:00
大师
作者: moonoftree (月之树)   2022-11-09 12:44:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com