栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】Day17 单调栈 AcWing 830. 单调栈 (算法基础课笔记)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】Day17 单调栈 AcWing 830. 单调栈 (算法基础课笔记)

AcWing 830. 单调栈 (算法基础课笔记)

一、题目&解读

1、题目2、题目解读 二、思路

1、判断条件 三、AC代码四、总结


前言
你好阿,我最近在学acwing的算法基础课,备战蓝桥杯,如果你也是一样的话,欢迎一起学习~


一、题目&解读 1、题目

题目链接{点击跳转}

2、题目解读

输出每个数左边第一个比它小的数 ,符合单调栈的模板
单调栈:相当于一个容器 存储的数据具有单调性 如果不符合的数据将会被弹出。

算法模板

常见模型:找出每个数左边离它最近的比它大/小的数
int tt = 0;
for (int i = 1; i <= n; i ++ )
{
    while (tt && check(stk[tt], i)) tt -- ;
    stk[ ++ tt] = i;
}
二、思路

借用老哥的图

1、判断条件

该题的判断条件如下:
top &&stk[top]>=x :如果栈顶大于x 则将栈顶弹出

三、AC代码

时间复杂度O(n)

#include 

using namespace std;

const int N = 100010;

int stk[N], top;

int main () {
    int m;
    cin >> m;
    while (m --) {
        int x;
        scanf("%d", &x);
        while (top &&stk[top]>=x)
            top--; //如果栈顶小于x 或者栈顶为空则弹出栈顶
        if (!top)
            printf("-1");
        else
            printf("%d", stk[top]);
        stk[++top] = x;  //更新栈顶
    }   
    return 0;
}
四、总结

学数据结构 最主要的还是要画图,先画一遍,代码自然就能够写了。

结尾:

感谢你能看完,希望对你有帮助 ,如有错误欢迎指正,码字不易,给个赞呗

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号