(模拟栈 单调栈)acwing828. 模拟栈 830. 单调栈算法基础班第二讲

2023-11-03

题目一 acwing828. 模拟栈

实现一个栈,栈初始为空,支持四种操作:

push x – 向栈顶插入一个数 x;
pop – 从栈顶弹出一个数;
empty – 判断栈是否为空;
query – 查询栈顶元素。
现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。

输入格式
第一行包含整数 M,表示操作次数。

接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。

输出格式
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示栈顶元素的值。

数据范围
1≤M≤100000,
1≤x≤109
所有操作保证合法。

输入样例:

10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty

输出样例:

5
5
YES
4
NO

分析

栈的定义:先进后出(后进先出)
这里用数组模拟栈

代码部分

#include <bits/stdc++.h>
using namespace std;

const int N=1e5+10;
int arr[N];
int ind=0;

void insert(int x)
{
    arr[++ind]=x;
    
}

void del()
{
    ind--;
}

bool isempty()
{
    return ind==0;
}

int query()
{
    return arr[ind];
}

int main (void)
{
    int n;
    cin>>n;
    
    
    while(n--)
    {
        string str;
        cin>>str;
        if(str=="push")
        {
            int x;
            cin>>x;
            insert(x);
        }
        else if(str=="pop")
        {
            del();
        }
        else if(str=="empty")
        {
            cout<<(isempty()?"YES":"NO")<<endl;
        }
        else
        {
            cout<<query()<<endl;
        }
    }
    
    
    return 0;
}









题目二 acwing830. 单调栈

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。

输入格式
第一行包含整数 N,表示数列长度。

第二行包含 N 个整数,表示整数数列。

输出格式
共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。

数据范围
1≤N≤105
1≤数列中元素≤109
输入样例:

5
3 4 2 7 5

输出样例:

-1 3 -1 2 2

分析

单调栈:栈中的元素具有单调性
例如这道题
如果我们用暴力的做法,时间复杂度为O(n2),每次遍历当前元素前面的元素直到找到小于它的元素或者遍历到栈底
我们发现如果存在一个a3>=a5,那a3对于a5后面的元素来说是毫无意义的,因为我们要找一个小于当前元素,且位置离当前元素最近的元素
所以这里我们如果从前向后遍历给定数组,并且存入栈中,如果当前元素小于等于栈顶元素,那我们就删除栈顶元素,如果如果当前元素大于栈顶元素,那么栈顶元素就是答案

代码部分

#include <bits/stdc++.h>
using namespace std;

void fast()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
}

const int N=1e5+10; 

int main (void)
{
	fast();
	int n;
	cin>>n;
	int arr[N];
	
	int i=0;
	while(n--)
	{
		int x;
		cin>>x;
		while(i&&arr[i]>=x)	i--;
		if(i)	cout<<arr[i]<<" ";
		else	cout<<"-1 ";
		
		arr[++i]=x;
	}
	
	return 0;
}



总结

stl中给定的模板,我们都可以使用数组实现,这样的好处就是有些时候可以变得更快,也让我们更加深刻的理解stl中的具体实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(模拟栈 单调栈)acwing828. 模拟栈 830. 单调栈算法基础班第二讲 的相关文章

  • 通过 VLA 数组跳转到 goto 时出现分段错误

    以下示例演示了该问题 include
  • OpenGL纹理渲染与原始不匹配

    我正在尝试使用 OpenGL 渲染纹理 我用作测试的纹理是白色背景上的一堆黑色矩形 如下所示 然而 在渲染时 纹理似乎被复制并叠加在其自身之上多次 我使用以下方法设置场景 std string vertexSource ShaderLoad
  • 静态成员函数与C语言绑定?

    以下 C 代码可使用 Visual C 和 g 进行编译 struct S static void foo extern C void S foo struct T static void foo extern C void T foo a
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • ZedGraph 缩放和调整大小

    当我绘制图形 放大和缩小并重新绘制图形时 图形的位置不会改变 我想要做的是 每当重新绘制数据时 视图都会更改以查看所有图形数据 如果您在重绘之前放大或缩小 这似乎会被禁用 Thanks 设置属性 IsZoomOnMouseCenter对于控
  • 无法在更新面板中找到上传的文件

    aspx
  • 整数与双精度算术性能?

    我正在编写一个 C 类来使用整数执行 2D 可分离卷积 以获得比双对应更好的性能 问题是我没有获得真正的性能提升 这是 X 过滤器代码 对于 int 和 double 情况都有效 foreach pixel int value 0 for
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • 使用 MapViewOfFile 有什么限制吗?

    我正在尝试将内存映射文件用作 hFile CreateFile State Path GENERIC READ FILE SHARE READ FILE SHARE WRITE 0 OPEN EXISTING FILE FLAG SEQUE
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • DLL 中的 XP 风格组合框

    我需要使用 C 和 WIN32 API 无 MFC 在 DLL 中创建 XP 风格的组合框 我设法在 DLL 中创建控件 不是以 XP 风格 我设法在带有清单的 exe 中创建 XP 样式组合框 但它在 DLL 中不起作用 为了让您的 DL
  • Windows Phone HttpClient PostAsync 挂起且无响应

    我在拨打电话时遇到问题HttpClientWP 应用程序的 post 方法 PostAsync总是挂起并且不给出任何响应 当我从 WPF 应用程序中尝试时 相同的代码可以工作 这是我正在做的事情 服务器Web API代码 public cl
  • Global.asax 错误处理程序或自定义 IHttpModule 错误处理程序未捕获未处理的异常

    我有一个类 DPCal EventMove 的一种方法 我想限制使用角色的访问 我有一个 Global asax cs 错误处理程序和一个自定义 IHttpModule 错误处理程序 旨在捕获未处理的异常 并将它们 Server Trans
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma

随机推荐

  • CentOS 8 正式停服;复旦教授痛批 Google 修复高危漏洞一直延期;WebStorm 2021.3.1 发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 开源大新闻 CentOS 8 正式
  • 蓝牙mesh_解密蓝牙mesh:低功耗节点LPN工作过程

    转载自蓝牙技术联盟 低功耗蓝牙 Bluetooth Low Energy 是全球最具节能性的短距离无线通信技术之一 其低功耗的特性广受开发者和消费者赞誉 随着蓝牙mesh网络的推出 开发者可能想知道蓝牙mesh网络是否也被设计为低功耗 是否
  • cmake使用总结

    官方文档CMake Reference Documentation CMake 3 7 2 Documentation CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 输出各种各样的makefile
  • 老电脑装Win11的步骤

    去UUP dump选择最新的win11 pro 运行脚本生成ISO文件 使用 https github com AveYo MediaCreationTool bat tree main bypass11 此脚本对ISO文件进行处理 让其可
  • 李开复硅谷之行感悟:跟他们比,我们的创业者现在最缺什么?

    李开复硅谷之行感悟 跟他们比 我们的创业者现在最缺什么 创业10日谈 2016 03 04 i黑马 15天 100人 2016年新年伊始 李开复亲自带队奔赴硅谷 26位鼎鼎大佬 DST米尔纳 Google皮猜 雅虎杨致远 YC孵化器SAM
  • R语言中rattle安装,GTK+反复不成功的问题

    1 首先百度到R语言官网下载最新的R语言环境 2 安装Rstudio去官网下载最新的Rstudio版本安装 如果下载太慢 可以通过百度网盘来下载 链接 https pan baidu com s 1N9eDa14Z5D dUQ5jH LDH
  • 【Leetcode】二叉树刷题I:226/116/114

    还是喜欢手写笔记 这里就直接附上笔记图片和代码 Cpp 学习资源 公众号labuladong 一 二叉树总述 二 leetcode226 Definition for a binary tree node struct TreeNode i
  • shell脚本的正则表达式

    一 概念 正则表达式是通过一些特殊字符的排序 用以删除 查找 替换一行或者多行文字字符串的程序 二 特殊字符 1 字符类 注意 任意字符 与重复字符 1 小数点 代表一定有一个任意字符的意思 2 星号 代表重复前一个0到无穷多次的意思 为组
  • unity台桌小游戏

    1 创建桌面 新建一个empty命名为table 创建子物体plane和四个cube 调整位置和大小 并赋予材质设置颜色 table cube1 cube2 cube3 cube4 2 给主相机添加代码 使相机始终跟随小球 using Sy
  • 卡尔曼滤波推导笔记

    文章目录 卡尔曼滤波 Kalman Filter 第一节 递归算法 第二节 数学基础 数据融合 Data Fuslen 协方差矩阵 Covariance Matrix 状态空间表达 State Space Representation 第三
  • VOC数据集和COCO数据集直接的相互转换

    VOC数据集 xml格式 和COCO数据集 json格式 的相互转换 我们先来看看voc和coco数据集的目录结构 以VOC2012数据集为例 下载下来有如下五个文件夹 Annotations文件夹是存放图片对应的xml文件 比如 2007
  • Intellij Idea 将java项目打包成jar

    1 菜单 File gt project stucture 2 在弹窗最左侧选中Artifacts gt 选jar 选择from modules with dependencies 然后会有配置窗口出现 配置完成后 勾选Build on m
  • Sklearn机器学习中fit,transform, fit_transform的区别

    一 简介 机器学习是从大量的数据中学习到相关的规律和逻辑 然后利用他们来预测未知的事物 它通过学习模拟人类的学习行为 能够自身组织和整理已学习到的知识 并在应用中不断地完善自身缺陷 二 机器学习的步骤 获取数据 数据处理 特征工程 标准化
  • QT添加外部库使用方法

    1 编译库 明确一点 不同编译器编译出来的库不一定可以互相使用的 所以尽量你的库文件是使用同一个编译器编译出来 首先找到你的qt所使用的编译器是哪个 一般会在QT的安装目录下的tools文件夹下 比如 D QT Tools mingw492
  • 基于RFID技术应用于图书档案管理

    基于RFID技术应用于图书档案管理 RFID是一种非接触式自动识别技术 通过射频信号自动识别目标对象并获取相关数据 它具有远距离 批量读取 可识别静止和运动状态下的物品信息 同传统的以条形码为代表的自动识别技术相比 RFID技术具有数据自动
  • 【笔记】行人属性识别

    论文 https arxiv org pdf 1901 07474 pdf 以下序号与论文序列不对应 属性可以看作是高层语义信息 对视点变化和观察条件多样性具有更强的鲁棒性 本文试图解决以下几个重要问题 1 传统和基于深度学习的行人属性识别
  • 华为OD机试 Python 【不开心的小朋友】

    描述 在游乐园里 有一些受小孩欢迎的摇摇车 但每辆车只能由一个小孩使用 其他的小孩要么选择等待要么选择离开 那些选择等待但最后未能玩的小孩会感到不开心 你能帮忙计算出哪些小孩会不开心吗 输入 摇摇车的数量 介于1到10之间 小孩的行动序列
  • yolov5源码--网络结构模块

    网络结构模块 可视化 网络配置文件 网络结构解读 代码解读 前向传播 特征提取网络 特征融合网络 检测头 可视化 python models export py weights weights yolov5s pt img 640 batc
  • 重磅:某国产IDE发布,称完全可替代 IntelliJ IDEA

    8 月下旬 一个号称 自主研发 的集成开发环境工具 CEC IDE 被多方质疑造假 最终在 8 月 26 日以官方出面致歉作结 这一事件虽然已经告一段落 但最近关于国产IDE的讨论也有所上升 日前 又一款宣称 纯自研 的国产IDE亮相了 桌
  • (模拟栈 单调栈)acwing828. 模拟栈 830. 单调栈算法基础班第二讲

    题目一 acwing828 模拟栈 实现一个栈 栈初始为空 支持四种操作 push x 向栈顶插入一个数 x pop 从栈顶弹出一个数 empty 判断栈是否为空 query 查询栈顶元素 现在要对栈进行 M 个操作 其中的每个操作 3 和