单调栈(左小大,右小大)

news2024/12/23 19:25:43

①寻找每个数左边第一个比它小的数

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
输入样例: 3 4 2 7 5
输出样例: -1 3 -1 2 2

在这里插入图片描述
从左到右遍历,用单调递增(栈底到栈顶)栈。让每次入栈前(如果当前元素要入的话)栈顶元素都是左边第一个比当前数小的数。

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

int n;
stack<int> st;

int main()
{
    scanf("%d", &n);
    while (n--)
    {
        int x;
        scanf("%d", &x);
        
        //单调递增栈(从栈底到栈顶)
        //每次入栈前(如果要入的话),栈顶都是左边第一个比当前数小的数,则单调递增
        while (!st.empty() && x <= st.top()) st.pop();
        if (!st.empty()) printf("%d ", st.top());
        else printf("-1 ");
        st.push(x); //如果当前数大于栈顶则入栈。记得入栈!!
    }
    return 0;
}

②寻找每个数左边第一个比它大的数

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
输入样例: 3 4 2 7 5
输出样例: -1 -1 4 -1 7

从左到右遍历,用单调递减栈。

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

int n;
stack<int> st;

int main()
{
    scanf("%d", &n);
    while (n--)
    {
        int x;
        scanf("%d", &x);
        
        while (!st.empty() && x >= st.top()) st.pop();
        if (!st.empty()) printf("%d ", st.top());
        else printf("-1 ");
        st.push(x);
    }
    return 0;
}

③寻找每个数右边第一个比它大的数

给定一个长度为 N 的整数数列,输出每个数右边第一个比它大的数,如果不存在则输出 −1。
输入样例: 3 4 2 7 5
输出样例: 4 7 7 -1 -1

从左到右遍历,用单调递减栈。栈里存储的数是都还没找到下一个更大的数,一旦找到了一个比栈顶大的数,立刻更新栈顶元素,同时把栈顶元素出栈。因为出栈时是倒序,不能直接输出答案,需要用个数组存储。
这里的栈存储的是元素的下标

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

const int N  =100010;
int n;
stack<int> st; //存储的是当前元素的下标
int a[N], res[N];

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    
    for (int i = 0; i < n; i++)
    {
        int x = a[i];
        
        while (!st.empty() && x > a[st.top()])
        {
            res[st.top()] = x;
            st.pop();
        }
        st.push(i);
    }
    
    for (int i = 0; i < n; i++)
    {
        if (res[i] == 0) printf("-1 ");
        else printf("%d ", res[i]);
    }
    return 0;
}

④寻找每个数右边第一个比它小的数

给定一个长度为 N 的整数数列,输出每个数右边第一个比它小的数,如果不存在则输出 −1。
输入样例: 3 4 2 7 5
输出样例: 2 2 -1 5 -1

从左到右遍历,用单调递增栈。栈里存储的数是都还没找到下一个更小的数,一旦找到了一个比栈顶小的数,立刻更新栈顶元素,同时把栈顶元素出栈。因为出栈时是倒序,不能直接输出答案,需要用个数组存储。
这里的栈存储的是元素的下标

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

const int N = 100010;
int a[N], res[N];
stack<int> st;
int n;

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    
    for (int i = 0; i < n; i++)
    {
        int x = a[i];
        while (!st.empty() && x < a[st.top()])
        {
            res[st.top()] = x;
            st.pop();
        }
        st.push(i);
    }
    
    for (int i = 0; i < n; i++)
    {
        if (res[i] == 0) printf("-1 ");
        else printf("%d ", res[i]);
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1894330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring MVC 中 使用 RESTFul 实现用户管理系统

1. Spring MVC 中 使用 RESTFul 实现用户管理系统 文章目录 1. Spring MVC 中 使用 RESTFul 实现用户管理系统2. 静态页面准备2.1 user.css2.2 user_index.html2.3 user_list.html2.4 user_add.html2.5 user_edit.html 3. SpringMVC环境搭建3.1 创建module&#xff1a;usermgt3…

操作审计(一)

操作审计&#xff08;一&#xff09; 前言一、快速查询事件二、高级查询事件总结 前言 这里主要记录操作审计的过程&#xff0c;操作审计其实就是监控并记录阿里云账号的活动&#xff0c;可以使用阿里云的操作审计服务来审计最近90天阿里云账号下的操作&#xff0c;从而确保云…

纯正刊!IF不降反升,国人通过率高>98%,29天录用!无“爆雷”风险

本周投稿推荐 SCI • 能源科学类&#xff0c;1.5-2.0&#xff08;来稿即录25天&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;纯正刊29天录用&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&a…

PhpStorm 2024 for Mac PHP集成开发工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

sql查询练习

1.表的结构 课程表&#xff1a;课程编号cid&#xff0c;课程名称canme&#xff0c;老师tid&#xff0c; 教师表&#xff1a;教师tid&#xff0c;教师姓名tname 分数表&#xff1a;学生student_sid&#xff0c;课程 cours_id&#xff0c;&#xff0c;分数score 学生表&#xff…

谷粒商城-个人笔记(集群部署篇二)

前言 ​学习视频&#xff1a;​Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强​学习文档&#xff1a; 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

【SSL 1823】消灭怪物(非传统BFS)

题目大意 小b现在玩一个极其无聊的游戏&#xff0c;它控制角色从基地出发&#xff0c;一路狂奔夺走了对方的水晶&#xff0c;可是正准备回城时&#xff0c;发现地图上已经生成了 n n n 个怪。 现在假设地图是二维平面&#xff0c;所有的怪和角色都认为是在这个二维平面的点上…

鸿翼夯实统一AI基础设施,加速大模型落地释放AI“模”力!

从“百模大战”到“千模大战”&#xff0c;全球通用大模型数量快速增加&#xff0c;将大模型融入企业&#xff0c;建立企业自身的AI基础设施&#xff0c;打造行业或特定领域、任务的专用大模型&#xff0c;助力生产力革新和产业升级&#xff0c;已经成为目前企业关注的核心。 大…

Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户填充功能

文章目录 什么是 AOP &#xff1f;.Net Core 中 有哪些 AOP 框架&#xff1f;基于 Castle DynamicProxy 实现 AOPIOC中使用 Castle DynamicProxy实现事务管理实现用户自动填充 什么是 AOP &#xff1f; AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&a…

实验二 图像的代数运算

一、实验目的&#xff1a; 1&#xff0e;了解图像的算术运算在数字图像处理中的初步应用。 2&#xff0e;体会图像算术运算处理的过程和处理前后图像的变化。 二、实验内容&#xff1a; 1&#xff0e;图像的加法运算 图像相加一般用于对同一场景的多幅图像求平均效果&…

c语言回顾-内存操作函数

目录 前言 1.memcpy 函数 1.1函数介绍 1.2与strcpy的区别 1.3memcpy的模拟 2.memmove 函数 2.1函数介绍和使用 2.2函数的模拟 3.memset函数 3.1函数介绍 3.2函数的模拟 4.memcmp函数 4.1函数的使用 4.2函数的模拟 结束语 前言 在动态内存的章节中小编详细讲解了动…

pandas数据分析(7)

组合DataFrame 连接 如果只是要将多个DataFrame粘合在一起&#xff0c;那么concat函数是最佳选择。在默认情况下&#xff0c;concat会将DataFrame按行粘合在一起&#xff0c;同时会将各列自动对齐。 如果想要按列进行粘合&#xff0c;需要将axis设置为1&#xff1a; concat的特…

​香橙派AIpro测评:usb鱼眼摄像头的Camera图像获取

一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比&#xff0c;同时还可以兼容ubuntu、安卓等多种操作系统&#xff0c;今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV5s算法的部署并使用一个外接的鱼眼USB摄像头…

【Git 学习笔记】gitk 命令与 git log 其他参数的使用

1.7 用 gitk 查看提交历史 # make sure you have gitk installed $ which gitk /usr/bin/gitk # Sync the commit ID $ git checkout master && git reset --hard 13dcad # bring up the gitk interface, --all to see everything $ gitk --all &实测结果&#xf…

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法 0. 引言1. 关于m_track2. 关于m_range_ring3. 关于m_ellipse4. 关于m_windrose5. 结语 0. 引言 本篇介绍下m_map中绘制航迹图函数&#xff08;m_track&#xff09;、绘…

网络数据传输中的封装与解封装详解

注&#xff1a;机翻&#xff0c;未校对。 The goal of networks is to transmit data from one host to another. 网络的目标是将数据从一个主机传输到另一个主机。 Encapsulation 封装 To achieve this goal, each layer adds its own header to the data. A header contain…

2024年7月5日 十二生肖 今日运势

小运播报&#xff1a;2024年7月5日&#xff0c;星期五&#xff0c;农历五月三十 &#xff08;甲辰年庚午月庚午日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;狗、羊、虎 需要注意&#xff1a;鸡、牛、鼠 喜神方位&#xff1a;西北方 财神方位&#xff1a;正…

深圳合规新动向,这个关键环节要做好

随着全球商业环境的日益复杂化&#xff0c;企业合规管理已成为维护公司稳健运营和市场竞争力的核心要素。特别是对于位于创新前沿的深圳市&#xff0c;有效的合规管理系统不仅是满足法律和监管要求的必须&#xff0c;更是企业可持续发展的关键。 深圳市在全国率先探索并成功实…

#数据结构 笔记三

二叉树 1. 概念 二叉树Binary Tree是n个结点的有限集合。它或者是空集n0&#xff0c;或者是由一个根结点以及两颗互不相交、分别称为左子树和右子树的二叉树组成。 二叉树与普通有序树不同&#xff0c;二叉树严格区分左子和右子&#xff0c;即使只有一个子结点也要区分左右。…

cloudreve 设置开机服务

创建一个Systemd服务文件&#xff1a; 打开终端并创建一个新的服务文件&#xff1a; sudo nano /etc/systemd/system/cloudreve.service 在服务文件中添加以下内容&#xff1a; 根据你的设置调整路径和参数&#xff0c;然后将以下配置粘贴到文件中&#xff1a; [Unit] Descri…