当前位置: 首页 > news >正文

【AcWing 830题解】单调栈

AcWing 830. 单调栈
【题目描述】
在这里插入图片描述
在查看解析之前,先给自己一点时间思考哦!
天津之眼
【题解】
题目要求给定一个整数序列,对于每个元素,输出其左侧第一个比它小的元素。如果不存在这样的元素,则输出-1。我们需要通过遍历数组来寻找每个元素的左侧第一个比它小的元素。为了解决这个问题,我们可以利用单调栈的方法。

1.单调栈的核心思想是栈中的元素是单调的,在这里我们可以让栈保持递减的顺序。具体来说,对于每个新的元素,我们将其与栈顶的元素进行比较,直到栈顶的元素小于当前元素时,当前元素的左侧第一个小于它的元素即为栈顶的元素。
2.如果栈为空,则说明当前元素左侧没有比它小的元素,此时输出 -1。
3.依次处理所有元素,最终得到每个元素左侧第一个比它小的元素。
【参考代码】

#include <iostream>
using namespace std;const int N = 1e5 + 10;  
int n, stk[N];  // stk数组用作栈,n是数组的长度int main() {cin >> n;  int tt = 0;  // 栈的指针,从栈底开始while (n--) {  int x;cin >> x;  // 当栈不为空且栈顶元素大于等于当前元素时,弹出栈顶元素while (tt && stk[tt] >= x)  // 如果栈顶大于当前元素,则弹出栈顶tt--;  // 出栈,栈指针减小if (!tt)  // 如果栈为空,说明左侧没有比当前元素小的数cout << "-1 ";  // 输出 -1else  // 否则输出栈顶的元素cout << stk[tt] << " ";  // 输出栈顶元素,即左侧第一个比当前元素小的元素stk[++tt] = x;  // 当前元素压入栈中,栈指针加1}return 0;  
}
http://www.lryc.cn/news/600353.html

相关文章:

  • JVM 基础架构全解析:运行时数据区与核心组件
  • OpenCV学习探秘之二 :数字图像的矩阵原理,OpenCV图像类与常用函数接口说明,及其常见操作核心技术详解
  • kafka中生产者的数据分发策略
  • Scrapy分布式爬虫数据统计全栈方案:构建企业级监控分析系统
  • 从0到1学Pandas(七):Pandas 在机器学习中的应用
  • 详解力扣高频SQL50题之1193. 每月交易 I【简单】
  • 深度解析【JVM】三大核心架构:运行时数据区、类加载与垃圾回收机制
  • JAVA算法题练习day1
  • Word文档转HTML查看器(字体颜色、字体背景、超链接、图片、目录等全部转换为html),统计Word文档段落数量、图片数量、表格数量、列表数量
  • 英语中因首字母大小写不同而意义不同的单词表
  • pyskl-Windows系统使用自己的数据集训练(一)
  • 习题5.7 如何分解能使这些数的乘积最大
  • tauri2项目配置update自动更新在自己电脑上编译
  • 【web大前端】001_前端开发入门:创建你的第一个网页
  • 顶顶通呼叫中心系统之创建与注册分机
  • Javaweb————HTTP的九种请求方法介绍
  • 开源智能体框架(Agent Zero)
  • 学习日志19 python
  • 今天凌晨,字节开源 Coze,如何白嫖?
  • 【19】C# 窗体应用WinForm ——【列表框ListBox、复选列表框CheckedListBox】属性、方法、实例应用
  • Rust Web框架性能对比与实战指南
  • 面试150 阶乘后的零
  • npm ERR! cb() never called!
  • Java操作Excel文档
  • Flink是如何实现物理分区?
  • Spring Cloud Gateway:微服务架构下的 API 网关详解
  • 【星野AI】minimax非活动时间充值优惠漏洞
  • 在Word和WPS文字中要同时查看和编辑一个文档的两个地方?拆分窗口
  • 机器语言基本概念
  • GIS地理信息系统建设:高精度3D建模