文章目录

  • 数组模拟栈
    • 栈的应用 单调栈
    • 栈(stack)
  • 数组模拟队列
    • 队列stl(queue)
    • 双端队列stl(deque)
    • 滑动窗口单调队列
  • 232.用栈实现队列
  • 225. 用队列实现栈
  • 20. 有效的括号
  • 1047. 删除字符串中的所有相邻重复项

数组模拟栈

题目链接

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>
#include<unordered_map>
#include<unordered_set>
using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll stk[N],tt;
// 定义一个名为solve的函数
void solve()
{ll m;cin>>m;while(m--){string s;ll q;cin>>s;if(s=="push"){cin>>q;stk[++tt]=q;}else if(s=="pop"){tt--;}else if(s=="query"){cout<<stk[tt]<<endl;}else{if(tt<=0) cout<<"YES"<<endl;else cout<<"NO"<<endl;}}
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的输入输出效率solve();
}

栈的应用 单调栈

题目链接

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>
#include<unordered_map>
#include<unordered_set>
using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll stk[N],tt;
ll a[N];
// 定义一个名为solve的函数
void solve()
{ll m;cin>>m;for(int i=0;i<m;i++){cin>>a[i];}for(int i=0;i<m;i++){while(tt&&stk[tt]>=a[i]){tt--;}if(tt<=0) cout<<"-1 ";else cout<<stk[tt]<<" ";stk[++tt]=a[i];}
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的输入输出效率solve();
}

栈(stack)

#include <stack>
//声明
stack<int>stk1;
stack<string>stk2;
stack<ListNode*>stk3;

在这里插入图片描述

myStack.push(10); // 入栈
myStack.pop(); // 出栈
if (!myStack.empty()) {int topElement = myStack.top(); // 访问栈顶元素
}
if (myStack.empty()) {// 栈为空
}
int stackSize = myStack.size(); // 获取栈的大小

数组模拟队列

题目链接

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>
#include<unordered_map>
#include<unordered_set>
using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll q[N],tt=-1;//队尾
ll hh;//队头
// 定义一个名为solve的函数
void solve()
{ll m;while(m--){string s;cin>>s;if(s=="push"){ll x;cin>>x;q[++tt]=x;}else if(s=="pop") hh++;else if(s=="query") cout<<q[hh]<<endl;else {if(tt-hh<=0) cout<<"YES\n";else cout<<"NO\n";}}
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的输入输出效率solve();
}

队列stl(queue)

#include <queue>
std::queue<int> myQueue; // 声明一个空的整数队列

在这里插入图片描述

myQueue.push(10); // 入队
myQueue.pop(); // 出队
if (!myQueue.empty()) {int frontElement = myQueue.front(); // 访问队首元素int backElement = myQueue.back(); // 访问队尾元素
}
if (myQueue.empty()) {// 队列为空
}
int queueSize = myQueue.size(); // 获取队列的大小

双端队列stl(deque)

std::deque<int> myDeque; // 声明一个空的整数双端队列

在C++的STL(Standard Template Library)中,deque(双端队列)是一个非常有用的容器。deque是一个双向开口的连续线性空间,可以在两端进行高效的插入和删除操作。本文将详细介绍C++ STL中deque的特点、使用方法和一些常见操作。
特点
deque具有以下特点:
双向开口:deque可以在两端进行高效的插入和删除操作,即在队首和队尾都可以进行操作。
动态扩展:deque的内部实现使用了分段连续线性空间,可以动态扩展以适应元素的增加。
随机访问:deque支持随机访问,可以通过下标访问元素。

在这里插入图片描述
myDeque.push_back(10); // 在队尾插入元素
myDeque.push_front(20); // 在队头插入元素
myDeque.pop_back(); // 删除队尾元素
myDeque.pop_front(); // 删除队头元素
if (!myDeque.empty()) {
int frontElement = myDeque.front(); // 访问队头元素
int backElement = myDeque.back(); // 访问队尾元素
}
if (myDeque.empty()) {
// 双端队列为空
}
int dequeSize = myDeque.size(); // 获取双端队列的大小
int element = myDeque[2]; // 访问下标为2的元素

滑动窗口单调队列

题目链接

#include <iostream>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include<list>
#include <set>
#include <ctime>
#include<unordered_map>
#include <bitset>
#include<random>
#include<regex>
#include <chrono>
#include<unordered_map>
#include<unordered_set>
using namespace std;typedef long long ll;
#define pr pair<double,int>
#define tp tuple<int,int,int>
const int N = 2e6 + 7;
const int mod = 998244353;
ll a[N];// 定义一个名为solve的函数
void solve()
{int n, k;cin >> n >> k;for (int i = 1; i <= n; i ++ ) cin >> a[i];//读入数据deque<int> q;for(int i = 1; i <= n; i++){while(q.size() && q.back() > a[i]) //新进入窗口的值小于队尾元素,则队尾出队列q.pop_back();q.push_back(a[i]);//将新进入的元素入队if(i - k >= 1 && q.front() == a[i - k])//若队头是否滑出了窗口,队头出队 q.pop_front();if(i >= k)//当窗口形成,输出队头对应的值cout << q.front() <<" ";}q.clear();cout << endl;//最大值亦然for(int i = 1; i <= n; i++){while(q.size() && q.back() < a[i]) q.pop_back();q.push_back(a[i]);if(i - k >= 1 && a[i - k] == q.front()) q.pop_front(); if(i >= k) cout << q.front() << " ";}
}int main()
{cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);//提高cin、cout的输入输出效率solve();
}

232.用栈实现队列

题目链接
文章讲解
主要思路就是把栈倒过来

class MyQueue {private:stack<int> in,out;void in2out() {while (!in.empty()) {out.push(in.top());in.pop();}}
public:MyQueue() {}void push(int x) {in.push(x);}int pop() {if(out.empty()) in2out();int x=out.top();out.pop();return x;}int peek() {if(out.empty()) in2out();return out.top();}bool empty() {if(out.empty()) in2out();return out.empty();}
};/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/

225. 用队列实现栈

题目链接
文章讲解

class MyStack {private:queue<int> in,out;public:MyStack() {}void push(int x) {out.push(x);while(!in.empty()){out.push(in.front());in.pop();}swap(in,out);}int pop() {int x=in.front();;in.pop();return x;}int top() {return in.front();}bool empty() {return in.empty();}
};/*** Your MyStack object will be instantiated and called as such:* MyStack* obj = new MyStack();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->top();* bool param_4 = obj->empty();*/

20. 有效的括号

题目链接
文章讲解

class Solution {
public:bool isValid(string s) {stack<char> stk;for(int i=0;i<s.size();i++){if (s[i]=='(')  stk.push(')');else if (s[i]=='[')  stk.push(']');else if (s[i]=='{')  stk.push('}');else{if(stk.empty()||stk.top()!=s[i]) return false;stk.pop();}}return stk.empty();}
};

1047. 删除字符串中的所有相邻重复项

题目链接
文章讲解

class Solution {
public:string removeDuplicates(string s) {string ans="";stack<char> stk;for(int i=0;i<s.size();i++){if(stk.size()>=1&&s[i]==stk.top()){stk.pop();}else stk.push(s[i]);}while(!stk.empty()){ans+=stk.top();stk.pop();}reverse(ans.begin(),ans.end());return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84392.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84392.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84392.shtml

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

相关文章

Unity 把广告收入(revenue)上报到AppsFlyer

文章目录 第一步第二步 官方文档 第一步 升级版本 如果你的AppsFlyer版本大于文档中要求的6.15以上&#xff0c;即可跳过第一步 在unity这里可以看到AppsFlyer版本 下载最新版本地址 在这个位置&#xff0c;单独下载这个unitypackage包就行 如果是用srict-mode(严格模式)…

2023年蓝桥杯青少第十四届蓝桥杯Scratch省赛中级组真题——小狗避障

小伙伴们&#xff0c;7月的全国信息素养大赛复赛准备得怎么样了&#xff1f;推荐到家做完信息素养大赛的历年真题后&#xff0c;可以有选择性的做做蓝桥杯青少的编程题&#xff0c;质量还是蛮好的&#xff5e; 下面这道是&#xff1a; 2023年蓝桥杯青少第十四届蓝桥杯Scratch…

为复杂iOS应用实施多重安全保护:从Ipa混淆到加密的完整安全方案

在现代移动应用的开发过程中&#xff0c;尤其是那些涉及用户隐私、支付或企业敏感数据的应用&#xff0c;安全问题早已成为不可忽视的核心问题。iOS系统由于其相对封闭的生态和严格的审核机制&#xff0c;通常被认为具有较高的安全性。然而&#xff0c;随着破解技术的发展&…

docker 如何优化容器启动时间

优化 Docker 容器启动时间&#xff0c;尤其在大规模部署、CI/CD 或微服务架构中非常关键。启动慢会影响响应时间、弹性扩缩容和用户体验。以下是从镜像构建、容器运行、依赖管理等多个方面整理的 容器启动加速方案&#xff1a; 一、优化镜像构建&#xff08;启动慢 ≈ 镜像臃肿…

基于 Python Django 框架的宠物医院管理系统设计与实现

摘要 本研究针对传统宠物医院管理模式存在的效率低下、信息不共享、服务流程繁琐等问题&#xff0c;设计并实现了一个基于 Python Django 框架的宠物医院管理系统。系统采用 B/S 架构&#xff0c;整合了客户管理、宠物管理、医生管理、诊疗管理、药品管理、库存管理、财务管理…

6612345(Web打印浏览器) 开发历程

6612345(Web打印浏览器) 开发历程 2022年7月,由于chrome新版本的限制, HttpPrinter(Web打印插件) 从http协议转为websocket协议. 为了提前预防chrome后续版本(至于哪个版本,我们也不知道)无法和本地插件通信,我们重新定制了一款chrome浏览器.绕过通讯限制. 首个版本,基于微软…

信安实验室CTF writeup

文章目录 1、白给签到2、Welcome3、Get4、Post5、滴滴滴6、每逢佳节7、Bacon8、古典变奏9、affine10、affine-revenge11、Random_encrypt12、easy_re13、re114、ez_xor15、maze16、easy_php17、easy_bypass18、Autumn19、easy_Cookie20、[白给] 连上就给flag21、小兔子22、我在…

【入门级-基础知识与编程环境:NOI以及相关活动的历史】

NOI 及相关活动的历史如下&#xff1a; 1984 年&#xff1a;邓小平同志提出 “计算机的普及要从娃娃抓起”。为响应这一号召&#xff0c;中国计算机学会&#xff08;CCF&#xff09;于当年自主创建了面向中学生的 “全国青少年程序设计竞赛”&#xff0c;当年参加竞赛的有 8000…

微软应用商店打不开怎么办2025,打开TLS1.3

微软应用商店打不开怎么办? 应用商店打不开 步骤如下 1. “Internet选项”、“高级”&#xff0c;进行设置 注意&#xff1a;将“使用TSL 1.2”和“使用TSL 1.3”都勾选上&#xff0c;再点击“应用” 应该最主要是TLS1.3&#xff0c;我之前TLS1.2开了的。 2. 选择“连接”…

C/C++ 高频八股文面试题1000题(一)

原作者&#xff1a;Linux教程&#xff0c;原文地址&#xff1a;C/C 高频八股文面试题1000题(一) 在准备技术岗位的求职过程中&#xff0c;C/C始终是绕不开的核心考察点。无论是互联网大厂的笔试面试&#xff0c;还是嵌入式、后台开发、系统编程等方向的岗位&#xff0c;C/C 都…

JetBrains IDE v2025.1 升级,AI 智能+语言支持齐飞

2025.1 大版本同步上线&#xff0c;JetBrains 家族全员升级&#xff01;不只是性能提升&#xff0c;更有 AI 驱动开发、大语言支持、终端大改&#xff0c;为开发者带来真正的生产力飞跃。接下来&#xff0c;一起来看看 IntelliJ IDEA、PyCharm、GoLand、CLion 等产品的重磅亮点…

高性能群集部署技术-LVS+Keepalived高可用群集

目录 #1.1Keepalived双机热备基础知识 1.1.1Keepalived概述及安装 1.1.2Keepalived的热备方式 1.1.3Keepalived的安装与服务控制 #2.1使用Keeplived实现双机热备 2.1.1主服务器的配置 2.1.2备用服务器的配置 2.1.3测试双机热备功能 #3.1使用Keeplived实现双机热备的实验案例…

ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据

ros中相机话题在web页面上的显示 思路&#xff1a; rosbridge websocket 开启ros与web的通路&#xff0c; 话题数据转换为image或者绘制在 canvas中。 话题格式&#xff1a; sensor_msgs/Image 测试数据编码类型为bgr8 尝试&#xff1a; 解析 为bitmap arraybuffer 写入bgr…

PowerShell批量处理文件名称/内容的修改

在日常的文件管理与处理中&#xff0c;常常需要对大量文件名或文件内容进行修改&#xff0c;而手动逐个操作既繁琐又容易出错。PowerShell作为一种强大的脚本语言&#xff0c;为我们提供了高效批量处理文件名及内容修改的解决方案。通过编写简单的PowerShell脚本&#xff0c;可…

GA3C(GPU/CPU混合式异步优势Actor-Critic)算法实现控制倒立摆

GA3C算法实现倒立摆 完整代码在文章结尾 GA3C算法 GPU/CPU混合式异步优势AC算法&#xff0c;是由A3C算法进一步优化而来&#xff0c;为了更好利用GPU计算资源。 GA3C理论上与A3C相同&#xff0c;属于On-Policy。但由于存在延迟更新问题&#xff0c;导致用于策略更新的数据并…

基础RAG实现,最佳入门选择(六)

带有问题生成的文档增强RAG 通过问题生成使用文档增强来实现增强的RAG方法。通过为每个文本块生成相关问题&#xff0c;改进了检索过程&#xff0c;从而从语言模型中获得更好的响应。 具体实现步骤 1.数据摄取&#xff1a;从PDF文件中提取文本。 2.chunking&#xff1a;将文本…

vue3 电商类网站实现规格的选择

目前有一个这样的需求 类似淘宝 京东选择 但是在人家大厂给的数据我不清除是什么样子的 我这边后端给的数据 一开始是想把规格全部显示出来的 发现实现不了 后端的数据有限 因为必须选择一个颜色 才可以对应的第二个规格 才知道有没有库存 因为这个库存 是由两个规格决定…

HarmonyOS5 音乐播放器app(一):歌曲展示与收藏功能(附代码)

鸿蒙音乐应用开发&#xff1a;从收藏功能实现看状态管理与交互设计 在移动应用开发中&#xff0c;收藏功能是用户体验的重要组成部分。本文将以鸿蒙OS音乐应用为例&#xff0c;详细解析如何实现具有动画效果的收藏功能&#xff0c;涉及状态管理、组件通信和交互动画等核心技术…

PHP函数大全参考代码

字符串相关操作函数 去除空格或其他字符 trim删除字符串两端空格或其他预定义字符rtrim删除字符串右边空格或其他预定义字符choprtrim() 的别名 chop() 与 Perl 的 chop() 函数有所不同&#xff0c;它会删除字符串的最后一个字符。ltrim删除字符串左边空格或其他预定义字符 字…

Flowise工作流引擎的本地部署与远程访问实践

文章目录 前言1. Docker安装Flowise2. Ubuntu安装Cpolar3. 配置Flowise公网地址4. 远程访问Flowise5. 固定Cpolar公网地址6. 固定地址访问 前言 当多数团队仍深陷传统数据处理框架的桎梏时&#xff0c;创新者已率先引入Flowise智能流程引擎&#xff0c;成功将面向大型语言模型…