算法基础之单调栈

单调栈

  • 求左边最小最近的数的值 没有返回-1

    • 将左边数存入栈(数组模拟) 若stk[tt] >=x 说明大于当前值 tt–

    • 利用栈的先进后出特性 能找到左边最近的

    •   #include
        
        using namespace std;
        const int N=100010;
        
        int skt[N],tt;
        int main(){
            int n;
            cin>>n;
            for(int i=0;i<n;i++){
                int x;
                cin>>x;
                //如果大于x 就--
                while(tt && skt[tt] >= x) tt--;
                //找到小于的 输出
                if(tt) cout<<skt[tt]<<" ";
                else cout<<-1<<" ";
                
                //将x存入
                skt[++tt] = x;
            }
            
        }
      

你可能感兴趣的:(算法,c++,数据结构)