057 · Online Stock Span
algorithm
Problem
设计一个类 StockSpanner,它用来处理每天到来的股票价格。
这个类需要支持一个方法:
next(price)每次调用 next(price) 时,表示今天的股票价格是 price。
你需要返回今天的股票跨度。
股票跨度的意思是:
从今天开始,向前连续看多少天,这些天的价格都小于或等于今天的价格。
也就是说,今天本身一定会被算进去,所以跨度至少是 1。
例如,连续收到这些价格:
[100, 80, 60, 70, 60, 75, 85]
每一天的跨度是:
100前面没有其他天,所以跨度是180前一天100比它大,所以只能算今天,跨度是160前一天80比它大,所以跨度是170可以包含今天70和前一天60,但再前面的80比它大,所以跨度是260前一天70比它大,所以跨度是175可以包含75, 60, 70, 60,但再前面的80比它大,所以跨度是485可以包含85, 75, 60, 70, 60, 80,但再前面的100比它大,所以跨度是6
所以每次调用返回的结果依次是:
[1, 1, 1, 2, 1, 4, 6]
请实现 StockSpanner 类:
StockSpanner()初始化对象next(price)接收今天的价格,并返回今天的股票跨度
Examples
示例 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]
解释:
StockSpanner stockSpanner = new StockSpanner()
stockSpanner.next(100) # 返回 1
stockSpanner.next(80) # 返回 1
stockSpanner.next(60) # 返回 1
stockSpanner.next(70) # 返回 2
stockSpanner.next(60) # 返回 1
stockSpanner.next(75) # 返回 4
stockSpanner.next(85) # 返回 6
示例 2
Input:
["StockSpanner", "next", "next", "next"]
[[], [31], [41], [48]]
Output:
[null, 1, 2, 3]
解释:价格每天都更高,所以每一天都可以把前面连续的所有天数算进跨度里。
示例 3
Input:
["StockSpanner", "next", "next", "next"]
[[], [90], [80], [70]]
Output:
[null, 1, 1, 1]
解释:价格每天都更低,所以每一天都只能算今天自己。
Constraints
- \(1 \leq\)
price\(\leq 10^5\) - 最多会调用
next\(10^4\) 次
Link
→ Solution