40 lines
1.2 KiB
Markdown
40 lines
1.2 KiB
Markdown
|
||
这道题也不是单调栈的简单题
|
||
|
||
需要记录 传入的所有price
|
||
|
||
注意 股票价格相同的情况
|
||
|
||
需要自己维护一个数组,用stack来记录下表, 因为数组下标从0开始的,注意 栈为空的两种情况(代码中注释)。
|
||
|
||
如果这道题,不用这个应用场景,而是直接给出输入数组的话,会简单一些。
|
||
|
||
这道题目他们都用两个栈来实现,貌似代码简介一些,但我这个最直观。 可以画一个图
|
||
|
||
```
|
||
class StockSpanner {
|
||
public:
|
||
stack<int> st;
|
||
vector<int> prices;
|
||
StockSpanner() {
|
||
}
|
||
|
||
int next(int price) {
|
||
prices.push_back(price);
|
||
while (!st.empty() && prices[st.top()] <= price) { // 注意这里等于的情况
|
||
st.pop();
|
||
}
|
||
int result;
|
||
int curPriceIndex = prices.size() - 1;
|
||
if (!st.empty()) { // 栈不为空,求差值
|
||
result = curPriceIndex - st.top();
|
||
} else { // 栈为空
|
||
if (prices.size() == 1) result = 1; // 如果是放入第一个元素就是,result是1
|
||
else result = curPriceIndex + 1; // 不是放入的第一个元素了,那么就应该是当前索引+1
|
||
}
|
||
st.push(curPriceIndex);
|
||
return result;
|
||
}
|
||
};
|
||
```
|