单调栈及其应用

单调栈

关于单调栈的基本性质和简单应用在线性表小结之队列与栈已经做了比较详细介绍,这里主要针对单调栈在实际解决问题中的应用进行补充例举与总结。

逛街

单调栈及其应用

解题思路:

从左往右(1~n)单调递减入栈,依次记录栈中元素个数(ans[]),在从右往左(n~1)单调递减入栈,依次累加栈中元素个数(ans[]),最后依次输出结果。

#include <iostream>
#include <stack>
using namespace std;

int main() {
    int n, num[100005] = {0};
    int ans[100005] = {0};
    stack<int> sta;
    
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin>>num[i];
    }
    
    for (int i = 1; i <= n; i++) {
       ans[i] = sta.size() + 1;
       while (!sta.empty() && sta.top() <= num[i]) {
           sta.pop();
       }
       sta.push(num[a]);
    }
    while (!sta.empty()) {
        sta.pop();
    }
    for (int i = n; i > 0; i--) {
        ans[i] += sta.size();
        while (!sta.empty() && sta.top() <= num[i]) {
            sta.pop();
        }
        sta.push(num[i]);
    }
    for (int i = 1; i <= n; i++) {
        i == 1 || cout << " ";
        cout << ans[i];
    }
    return 0;
}

 

上一篇:IEEE 802.11协议基础知识整理


下一篇:LeetCode刷题记81-71. 简化路径