这道题也不是单调栈的简单题 需要记录 传入的所有price 注意 股票价格相同的情况 需要自己维护一个数组,用stack来记录下表, 因为数组下标从0开始的,注意 栈为空的两种情况(代码中注释)。 如果这道题,不用这个应用场景,而是直接给出输入数组的话,会简单一些。 这道题目他们都用两个栈来实现,貌似代码简介一些,但我这个最直观。 可以画一个图 ``` class StockSpanner { public: stack st; vector 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; } }; ```