题目地址:
https://leetcode.com/problems/online-stock-span/description/
构造一个类,这个类每次接受一个整数(范围 [ 1 , 1 0 5 ] [1,10^5] [1,105]),并返回上一个比它大的整数和它之间的下标之差。
可以用单调栈。代码如下:
class StockSpanner {
public:
using PII = pair<int, int>;
stack<PII> stk;
int day;
StockSpanner() {
stk.push({-1, 2e9});
day = 0;
}
int next(int x) {
while (stk.size() && stk.top().second <= x) stk.pop();
int res = day - stk.top().first;
stk.push({day++, x});
return res;
}
};
初始化时间复杂度 O ( 1 ) O(1) O(1),每次操作时空复杂度 O ( n ) O(n) O(n), n n n表示操作次数。