• 【原创】单调栈解析+模板


    单调栈,顾名思义,就是由一组数据。生成一个栈内数值单调递增或递减的栈。

    单调栈的意义在于:

    在生成单调栈的过程中,可以记录当前数组内的 i 位置往左数,第一个比 i 位置的数大或小的数(大即为递减,小即为递增)(从左端开始入栈的情况下,右端开始入栈即为往右数)

    单调递减栈生成过程:

    1、在数组中,提取一个数;

    2、若栈为空,直接放入,并记录当前原数组位置无最小/最大值;

    3、若栈不为空,则将栈顶元素与数组中提取的数值进行比较;

    4、若栈顶元素比数组中提取的元素更大,则弹出栈顶元素,继续比较新的栈顶元素,直至栈顶元素小于数组中提取的元素(转跳第5步)或栈空(转跳第2步);

    5、若栈顶元素比数组中提取的元素要小,则先记录当前栈顶元素为(参见单调栈意义),后将提取的元素压入栈中。

    实现代码如下:

     1 #include <iostream>
     2 #include <stack>
     3 using namespace std;
     4 stack <int> stk;
     5 int main(){
     6     int n,list1[50],L[50];
     7     cin>>n;
     8     for(int i=0;i<n;i++) cin>>list1[i];
     9     for(int i=0;i<n;i++){
    10         while(!stk.empty()&&list1[stk.top()]>=list1[i]){//当前栈为单调递减,改为<=为单调递增
    11             stk.pop();
    12         }
    13         if(stk.empty()){
    14             L[i]=-1;
    15         }
    16         else L[i]=stk.top();
    17         stk.push(i);
    18     }
    19 }
  • 相关阅读:
    JS函数防抖与函数节流
    AJAX问题 XMLHttpRequest.status = 0是什么含义
    通过JS如何获取IP地址
    关于URL编码
    报错Unexpected token u
    css文本超出2行就隐藏并且显示省略号
    At_speed_test
    Logic Bist Arch
    Logic BIST
    DMA-330(二)
  • 原文地址:https://www.cnblogs.com/Never-Land/p/11291899.html
Copyright © 2020-2023  润新知