单调栈—acwing

ops/2024/11/14 9:23:10/

一、题目:

AcWing 830. 单调栈 - AcWing

暴力算法思想 

双指针算法,本质上是比较操作,两个循环,时间复杂度高。通过栈可以一次遍历。

可以知道,只要前面有一个小于我的数,就可以。如果前面的数,都比我前面的大,都不用比前面的了,只要前面的不行,其他的也肯定不行。所以只要前面的大于后面的,就把前面的pop掉。

单调栈思想:

借助栈来实现,题目说要前面一个比自己小的。

如果我入栈为空,那么就输出-1

如果我入栈非空,那么就看栈顶是否<我,如果比我大于等于,那么我就pop他,直至为空或者知道找到一个小于我的。

代码(练习stl)

多用了一个vector动态数组有点浪费。

#include<bits/stdc++.h>
using namespace std;stack<int>stk;
vector<int> a;int main() {int n;cin >> n;for(int i = 0; i < n; i ++) {int x; cin >> x;a.push_back(x);}int i = 0;while(i < a.size()) {if(stk.empty()) {stk.push(a[i++]);cout << -1 << " ";}while(!stk.empty() && stk.top()>=a[i]) {stk.pop();}if(stk.empty()) cout << -1 << " ";else if(!stk.empty()) cout << stk.top() << " ";stk.push(a[i++]);}return 0;
}

代码2(数组实现)

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;int a[N], top = 0;
int n;int main() {cin >> n;for(int i = 0; i < n; i ++) {int x;cin >> x;while(top && a[top-1]>=x) top --;if(top) cout << a[top-1] << " ";else cout << -1 << " ";a[top++] = x;}return 0;
}

代码3(练习stl)

#include<bits/stdc++.h>
using namespace std;stack<int> stk;int n;int main() {cin >> n;for(int i = 0; i < n; i ++) {int x;cin >> x;while(!stk.empty() && stk.top()>=x) stk.pop();if(!stk.empty()) cout << stk.top() << " ";else cout << -1 << " ";stk.push(x);}return 0;
}


http://www.ppmy.cn/ops/133231.html

相关文章

PDF24:多功能 PDF 工具使用指南

PDF24&#xff1a;多功能 PDF 工具使用指南 在日常工作和学习中&#xff0c;PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并&#xff0c;还是转换 PDF 文件&#xff0c;能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

OSPF动态路由配置实验:实现高效网络自动化

实验主题&#xff1a;OSPF动态路由协议配置 实验背景 OSPF&#xff08;Open Shortest Path First&#xff09;是一种基于链路状态的路由协议&#xff0c;广泛应用于中大型网络中。它采用Dijkstra算法计算最短路径&#xff0c;以确保网络中的路由更新快速、稳定&#xff0c;并能…

基于微信小程序实现个人健康管理系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

2024年三个月自学手册 网络安全(黑客技术)

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、…

鸿蒙NEXT开发案例:转盘

【1】引言&#xff08;完整代码在最后面&#xff09; 在鸿蒙NEXT系统中&#xff0c;开发一个有趣且实用的转盘应用不仅可以提升用户体验&#xff0c;还能展示鸿蒙系统的强大功能。本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用&#xff0c;涵盖从组件定义到用户交互的完…

100+SCI科研绘图系列教程(R和python)

科研绘图系列&#xff1a;箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列&#xff1a;箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列&#xff1a;小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列&#xff1a;组间差异的STAMP图的ggplot2实现-CSDN博客…

力扣 简单 70.爬楼梯

文章目录 题目介绍题解 题目介绍 题解 思路分析&#xff1a; 确定dp数组以及下标的含义&#xff1a;dp[i]&#xff1a; 爬到第i层楼梯&#xff0c;有dp[i]种方法确定递推公式&#xff1a;从dp[i]的定义可以看出&#xff0c;dp[i] 可以有两个方向推出来。首先是dp[i - 1]&…

React官网生成Recat项目的区别

1. Next.js 特点&#xff1a; 页面级路由&#xff1a;使用文件系统路由&#xff0c;基于 /pages 文件夹的结构自动创建 URL 路径。渲染模式&#xff1a;支持三种渲染模式&#xff1a;静态生成 (SSG)、服务器端渲染 (SSR) 和客户端渲染 (CSR)&#xff0c;并允许根据页面的具体需…