当前位置: 首页 > 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.dtcms.com/a/299894.html

相关文章:

  • Node.js 模拟 Linux 环境
  • 栈----2.最小栈
  • S7-200 SMART 数字量 I/O 组态指南:从参数设置到实战案例
  • OpenFeign-远程调用
  • 解决英文版Windows10安装WireShark报错
  • 秋招Day19 - 分布式 - 分布式设计
  • MySQL事务原理
  • C 与 C++ 的区别:发展、特性及优缺点详解
  • [1+2cos(ω)+2cos(2ω)+……+2cos(Nω)]sin(ω/2)=sin[(ω+1/2)N]
  • 【学习路线】Linux从入门到精通:系统化学习路线指南
  • 亚马逊测评采购:如何打造安全的环境,技术基础关键
  • Linux应用开发基础知识——Framebuffer应用编程(六)
  • 栈算法之【有效括号】
  • 在Word和WPS文字中要同时查看和编辑一个文档的两个地方?拆分窗口
  • 《Moco: Momentum Contrast for Unsupervised Visual Representation Learning》论文精读笔记
  • 固态硬盘SSD简介
  • 数字孪生映射探索驱动的具身导航!MorphoNavi:面向对象映射的空地机器人导航
  • Datawhale AI数据分析 作业3
  • 【深度学习新浪潮】什么是GUI Agent?
  • SpringMVC的请求执行流程是什么样的?
  • Houdini快速模拟烟雾
  • Tm.sys是什么文件
  • WLAN网络分类与详细对比
  • Unity 实现帧率(FPS)显示功能
  • Paimon Consumer机制解析
  • 守护汽车“空中升级“:基于HSM/KMS的安全OTA固件签名与验证方案
  • 通过redis_exporter监控redis cluster
  • 1. Qt多线程开发
  • JavaEE初阶第十一期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(九)
  • 第10篇:实战验收篇