【LeetCode】901、株価スパン

1. トピック

901. 株価スパン

2. アイデア

左方向、<= この値、連続最大間隔。

つまり、左方向では、最初の >= この値、最大添え字間の差です。

これは最初の問題 >= この値であるため、モノトニック スタックで解決できます。

したがって、単調に減少するスタックが構築されます (スタックの下部からスタックの上部に減少します)。スタックに記録されますpair<下标,值>新しい要素がスタックの先頭にある場合は、スタックをポップし、新しい要素がスタックにプッシュされた場合は、インデックスとスタックの先頭の差を記録します。

以下のテスト ケースに注意してください: 3 番目の要素は 3 の出力を想定しているため、その間に > の代わりに >= を使用します。

ここに画像の説明を挿入

3. 問題解決

class StockSpanner {
    
    
public:
    StockSpanner() {
    
    
        st.emplace(-1,INT_MAX);
        idx = -1;
    }

    int next(int price) {
    
    
        ++idx;
        while (!st.empty() && price >= st.top().second) {
    
    
            st.pop();
        }
        int ret = idx - st.top().first;
        st.emplace(idx, price);
        return ret;
    }
private:
    stack<pair<int,int>> st;
    int idx;
};

/**
 * Your StockSpanner object will be instantiated and called as such:
 * StockSpanner* obj = new StockSpanner();
 * int param_1 = obj->next(price);
 */

おすすめ

転載: blog.csdn.net/jiaoyangwm/article/details/127468571