zoukankan      html  css  js  c++  java
  • 算法题之单调栈的应用

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

    逛街

    解题思路

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

    代码实现(C++)

    #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;
    }

    未完待续。。。

    Min是清明的茗
  • 相关阅读:
    QEMU编译及使用方法
    C++中的算法
    C++继承
    gcc savetemps选项
    C++ overload、override、overwrite
    拷贝构造函数与拷贝赋值
    C++中的顺序容器
    C++中的虚函数(1)
    C++中lambda的实现(1)
    正确的时间做适合的事
  • 原文地址:https://www.cnblogs.com/MinPage/p/14052629.html
Copyright © 2011-2022 走看看