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

【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.xdnf.cn/news/16341.html

相关文章:

  • 是德科技 | AI上车后,这条“高速公路”如何畅通?
  • HarmonyOS应用上架流程详解
  • 【音视频协议篇】WebRTC 快速入门
  • unittest 案例执行顺序详解
  • QUIC协议如何在UDP基础上解决网络切换问题
  • 相机标定相关原理
  • NTLite Ent Version
  • leetcode112, 257:二叉树的路径总和、二叉树的所有路径双题对比
  • 【Pandas】pandas Index objects Index.name
  • MGER实验
  • 【面板数据】中国A股上市公司制造业智能制造数据集(1992-2024年)
  • 不正确的 clone() 方法实现与修复方案
  • 中电建路桥集团有限公司重大项目管理办公室成立
  • Vibe Coding | 技术让我们回归了创造的本质
  • Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
  • HTTPS协议
  • 检索召回率优化探究一:基于 LangChain 0.3集成 Milvus 2.5向量数据库构建的智能问答系统
  • 通过redis_exporter监控redis cluster
  • 在Word和WPS文字中要同时查看和编辑一个文档的两个地方?拆分窗口
  • 每日一题【删除有序数组中的重复项 II】
  • 【web应用】如何进行前后端调试Debug? + 前端JavaScript调试Debug?
  • ISIS分片扩展实验案例
  • 计数dp(基础)
  • windows安装mysql8缺少时区信息
  • 【LeetCode 热题 100】131. 分割回文串——回溯
  • mysql group by 多个行转换为一个字段
  • SSH连接失败排查与解决教程: Connection refused
  • 一款基于react-native harmonyOS 封装的【文档】文件预览查看开源库(基于Harmony 原生文件预览服务进行封装)
  • 高可用集群KEEPALIVED的详细部署
  • Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活