单调栈模拟就行。
/*
* @lc app=leetcode id=901 lang=cpp
*
* [901] Online Stock Span
*/
// @lc code=start
class StockSpanner {
public:
stack<pair<int,int>> s;
int cnt;
StockSpanner() {
cnt = 0;
}
int next(int price) {
cnt++;
int desc = 0;
while(!s.empty() && s.top().first <= price) s.pop();
if(!s.empty()) {
desc = s.top().second;
}
s.push(make_pair(price, cnt));
return cnt - desc;
}
};
/**
* Your StockSpanner object will be instantiated and called as such:
* StockSpanner* obj = new StockSpanner();
* int param_1 = obj->next(price);
*/
// @lc code=end
本文介绍如何使用单调栈算法模拟解决LeetCode问题901 OnlineStockSpan,通过实例代码讲解如何计算股票价格的跨度。重点在于理解如何利用单调栈来高效计算股票价格变化期间的连续上涨天数。
504

被折叠的 条评论
为什么被折叠?



