mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
"""
|
|
901. Online Stock Span
|
|
Difficulty: Medium
|
|
https://leetcode.com/problems/online-stock-span/
|
|
|
|
──────────────────────────────────────────────────
|
|
|
|
Design an algorithm that collects daily price quotes for some stock
|
|
and returns the span of that stock's price for the current day.
|
|
|
|
The span of the stock's price in one day is the maximum number of
|
|
consecutive days (starting from that day and going backward) for which
|
|
the stock price was less than or equal to the price of that day.
|
|
|
|
• For example, if the prices of the stock in the last four days are
|
|
[7,2,1,2] and the price of the stock today is 2, then the span of
|
|
today is 4 because starting from today, the price of the stock was
|
|
less than or equal to 2 for 4 consecutive days.
|
|
|
|
• Also, if the prices of the stock in the last four days is
|
|
[7,34,1,2] and the price of the stock today is 8, then the span of
|
|
today is 3 because starting from today, the price of the stock was
|
|
less than or equal 8 for 3 consecutive days.
|
|
|
|
Implement the StockSpanner class:
|
|
|
|
• StockSpanner() Initializes the object of the class.
|
|
|
|
• int next(int price) Returns the span of the stock's price given
|
|
that today's price is price.
|
|
|
|
|
|
|
|
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]
|
|
|
|
Explanation
|
|
StockSpanner stockSpanner = new StockSpanner();
|
|
stockSpanner.next(100); // return 1
|
|
stockSpanner.next(80); // return 1
|
|
stockSpanner.next(60); // return 1
|
|
stockSpanner.next(70); // return 2
|
|
stockSpanner.next(60); // return 1
|
|
stockSpanner.next(75); // return 4, because the last 4 prices
|
|
(including today's price of 75) were less than or equal to today's
|
|
price.
|
|
stockSpanner.next(85); // return 6
|
|
|
|
|
|
|
|
Constraints:
|
|
|
|
• 1 <= price <= 10^5
|
|
|
|
• At most 10^4 calls will be made to next.
|
|
"""
|
|
|
|
|
|
class StockSpanner:
|
|
def __init__(self):
|
|
self.stack = []
|
|
|
|
def next(self, price: int) -> int:
|
|
ans = 1
|
|
while self.stack and self.stack[-1][0] <= price:
|
|
ans += self.stack.pop()[1]
|
|
|
|
self.stack.append([price, ans])
|
|
return ans
|
|
|
|
|
|
# Your StockSpanner object will be instantiated and called as such:
|
|
# obj = StockSpanner()
|
|
# param_1 = obj.next(price)
|