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

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

给定一个长度为 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.mzph.cn/bicheng/40693.shtml

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

相关文章

数据看板/可视化大屏的实际价值到底是什么?详解数据可视化的实用之处

数据驾驶舱/数据看板/可视化大屏的实际价值&#xff0c;取决于使用者的实际需求。 华而不实&#xff1f;华就是实&#xff01; 关于可视化大屏最广泛的争议&#xff0c;便是对其“华而不实”的批评&#xff0c;认为可视化大屏缺乏技术含量&#xff0c;只是一钟比较高级的“装饰…

推荐 2个功能强大的黑科技工具,真的会让你直呼卧槽

Waifu2X Waifu2x 是一个基于深度学习的开源项目&#xff0c;主要用于处理二次元动漫风格的图像。它使用卷积神经网络&#xff08;CNN&#xff09;进行超分辨率处理和降噪&#xff0c;能够将图像放大2倍或更多&#xff0c;同时显著提高清晰度和减少噪声。Waifu2x 特别针对日系漫…

小龙虾优化24种机器学习多输入单输出回归|时序预测模型

小龙虾优化24种机器学习多输入单输出回归|时序预测模型 文章目录 小龙虾优化24种机器学习多输入单输出回归|时序预测模型前言一、小龙虾优化基本原理二、优化机器学习模型1.COA-CNN-BiGRU-Attention回归模型2.基于小龙虾优化支持向量机的数据回归预测Matlab程序COA-SVM 多特征输…

还在Excel中管理您的持续改进项目吗?

对于大多数公司来说&#xff0c;Microsoft Excel是一种可靠的资源&#xff0c;它确实提供了极高的价值。然而&#xff0c;当它被用来跟踪持续改进项目时&#xff0c;它的价值就减少了。浪费时间从不同内部系统的不同报告中收集数据&#xff0c;会占用推动重要变革的时间。让我们…

使用微信开发者工具连接gitee

编写代码 打开微信开发者工具 编写小程序代码 提交代码 在微信开发者工具提交代码到gitee仓库的步骤&#xff1a; 1.在gitee创建仓库&#xff0c;得到仓库url 2.微信开发者工具设置远程仓库 点击版本管理-->点击设置-->网络和认证-->认证方式选择 使用用户名和…

STM32工业自动化控制系统教程

目录 引言环境准备工业自动化控制系统基础代码实现&#xff1a;实现工业自动化控制系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 控制系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与优化问题解决方案与优化收尾与总结 1. 引言 工业自动化控制系统利用…

MySQL 如何实现将数据实时同步到 ES ?

引言&#xff1a;在现代应用程序开发中&#xff0c;通常会将数据存储在 MySQL 中&#xff0c;用于事务性处理和数据持久化。而 Elasticsearch&#xff08;ES&#xff09;则是一种专门用于全文搜索和分析的强大工具。将这两者结合使用的一个常见需求是实时将 MySQL 中的数据同步…

【报错解决】ValueError: Compression type zstd not supported

每次开新环境去运行一些calibration相关的代码时&#xff0c;因为用的数据集格式是zst&#xff0c;都会报错ValueError: Compression type zstd not supported&#xff0c;所以在此特别记录一下&#xff0c;以后直接安装依赖包就好。 解决办法&#xff1a;运行pip install zst…

Build a Large Language Model (From Scratch)附录C(gpt-4o翻译版)

来源&#xff1a;https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

ECCV2024|底层视觉(超分辨率,图像恢复,去雨,去雾,去模糊,去噪等)相关论文汇总(附论文链接/开源代码)【持续更新】

ECCV2024&#xff5c;底层视觉相关论文汇总&#xff08;如果觉得有帮助&#xff0c;欢迎点赞和收藏&#xff09; 1.超分辨率(Super-Resolution)Data Overfitting for On-Device Super-Resolution with Dynamic Algorithm and Compiler Co-DesignSMFANet: A Lightweight Self-Mo…

开始尝试从0写一个项目--后端(一)

创建文件的目录结构 利用这个界面创建 序号 名称 说明 1 SEMS maven父工程&#xff0c;统一管理依赖版本&#xff0c;聚合其他子模块 2 sems-common 子模块&#xff0c;存放公共类&#xff0c;例如&#xff1a;工具类、常量类、异常类等 3 sems-pojo 子模块&#x…

ArcGIS Pro SDK (七)编辑 11 撤销重做

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 11 撤销&重做 文章目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 11 撤销&重做1 撤消/重做最近的操作 环境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 撤消/重做最近的操作 //撤销 if (MapV…

centos安装yum命令及常用yum命令

一、准备工作 获取安装介质&#xff1a; 如果你有CentOS的安装ISO文件或DVD介质&#xff0c;可以直接使用它来设置本地yum源。 如果没有&#xff0c;你需要在一个有网络连接的CentOS系统上下载所需的rpm包和依赖。 创建挂载点&#xff08;如果你使用的是ISO文件&#xff09;&a…

找不到msvcp120.dll无法继续执行的原因分析及解决方法

在计算机使用中&#xff0c;经常会遇到msvcp120.dll文件丢失的情况&#xff0c;很多人对这个文件不是很熟悉&#xff0c;今天就来给大家讲解一下msvcp120.dll文件的丢失以及这个文件的重要性&#xff0c;让大家更好地了解计算机&#xff0c;同时也可以帮助我们更好地掌握这个文…

揭秘品牌成功秘诀:品牌营销策略的核心要素大公开

品牌营销作为企业战略中至关重要的一环&#xff0c;其核心是建立和传播品牌的独特魅力&#xff0c;使其在消费者心目中占据重要位置。 一个成功的品牌营销策略能够提升品牌的知名度和影响力&#xff0c;带来持续的销售和忠诚客户群体。 在当今竞争激烈的市场环境中&#xff0…

树状数组基础知识

lowbit: lowbit(x)x&(-x) 树状数组&#xff1a; 树状数组的功能&#xff1a; 数组 在O(1)的时间复杂度实现单点加&#xff1a; 在O(lng n)的时间复杂度实现查询前缀和&#xff1a; 树状数组的定义&#xff1a; 查询前x项的和操作&#xff1a; ll query(int x){ll s0;f…

解密MySQL限制:如何在DELETE操作中绕过子查询问题

今天按照需求写SQL语句来清洗脏数据的时候&#xff0c;想从evidence_web中删除content_id大于1的全部记录&#xff0c;本来以为写一个子查询delete后即可&#xff0c;但是却出现了1093 - You cant specify target table evidence_web for update in FROM clause报错&#xff0c…

户用分布式光伏项目开发模式

随着全球对可再生能源的重视和技术的不断进步&#xff0c;分布式光伏发电作为一种清洁、高效、可再生的能源形式&#xff0c;正逐渐成为新能源发展的重要方向。户用分布式光伏项目&#xff0c;作为分布式光伏发电的重要组成部分&#xff0c;其开发模式对于推动光伏产业的普及与…

二分查找及其变种

一、概念 二分查找算法&#xff08;Binary Search Algorithm&#xff09;是一种在有序数组中查找特定元素的高效搜索方法。 其基本思想是将目标值与数组中间的元素进行比较&#xff0c;如果目标值等于中间元素&#xff0c;则查找成功&#xff1b;如果目标值小于中间元素&…

第十五章 Qt的QGraphics View绘图框架详解

目录 一、视图、场景、图形项 1、Graphics View 绘图架构 1.1、图形项 GraphicsItem 1.2、场景 QGraphicsScene 1.3、视图 QGraphicsView 2、图形项、场景、视图的坐标系 3、Graphics View 基础练习 二、使用自定义视图处理鼠标事件 1、添加自定义视图类 2、使用自定…