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

stack/queue---入门OJ题

20. 有效的括号 - 力扣(LeetCode)

大致的思路就是便利字符串,左括号入栈,遇到右括号就出栈顶元素与之判断匹配,匹配成功就继续往后走,匹配失败就直接return false,跳出循环之后额外判断一下如果栈为空则说明全部匹配成功,如果栈里还有括号就说明没有全部匹配成功。

class Solution { public: bool isValid(string s) { stack<char> st; for(int i = 0;i < s.size();i++) { if(s[i] == '(' || s[i] == '{' || s[i] == '[') { st.push(s[i]); } else { //有可能s里只有右括号 if(!st.empty()) { char tp = st.top(); st.pop(); if(tp == '(' && s[i] != ')' || tp == '{' && s[i] != '}' || tp == '[' && s[i] != ']') { return false; } } else { return false; } } } if(!st.empty()) { return false; } return true; } };

225. 用队列实现栈 - 力扣(LeetCode)

按照下图的逻辑去解决问题就可以了,唯一要注意的就是取栈顶元素的时候不能像出栈那样先将size-1个数据挪到另一个队列再去取栈顶元素,因为这样的话下一次入栈就不知道该往哪个队列里去入数据了。

class MyStack { public: MyStack() {} void push(int x) { if(!q1.empty()) { q1.push(x); } else { q2.push(x); } } int pop() { if(!q1.empty()) { int sz = q1.size(); --sz; while(sz--) { q2.push(q1.front()); q1.pop(); } int x = q1.front(); q1.pop(); return x; } else { int sz = q2.size(); --sz; while(sz--) { q1.push(q2.front()); q2.pop(); } int x = q2.front(); q2.pop(); return x; } } int top() { if(!q1.empty()) { return q1.back(); } else { return q2.back(); } } bool empty() { return q1.empty() && q2.empty(); } private: queue<int> q1; queue<int> q2; };

232. 用栈实现队列 - 力扣(LeetCode)

一个栈用来出数据,一个用来入数据。

class MyQueue { public: MyQueue() {} void push(int x) { stpush.push(x); } int pop() { if(stpop.empty()) { while(!stpush.empty()) { stpop.push(stpush.top()); stpush.pop(); } } int x = stpop.top(); stpop.pop(); return x; } int peek() { if(stpop.empty()) { while(!stpush.empty()) { stpop.push(stpush.top()); stpush.pop(); } } return stpop.top(); } bool empty() { return stpush.empty() && stpop.empty(); } private: stack<int> stpush; stack<int> stpop; };

155. 最小栈 - 力扣(LeetCode)

本题的重点是获取栈中的最小元素。

下边的pop函数为什么只要判断minst的栈顶就可以了?不用考虑minst里其他元素跟st将要删除的元素一样吗?不用,minst里存的是当前栈里最小的数据,比minst.top()大的不会进minst里,比minst.top()小的就应该就是minst.top()呀,所以不可能出现上述情况。

class MinStack { public: MinStack() {} void push(int value) { st.push(value); if(minst.empty() || value <= minst.top()) { minst.push(value); } } void pop() { if(st.top() == minst.top()) minst.pop(); int x = st.top(); st.pop(); } int top() { return st.top(); } int getMin() { return minst.top(); } private: stack<int> st; stack<int> minst; };

栈的压入、弹出序列_牛客题霸_牛客网

模拟题。定义两个指针pushi和popi分别指向入栈序列和出栈序列,

class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pushV int整型vector * @param popV int整型vector * @return bool布尔型 */ bool IsPopOrder(vector<int>& pushV, vector<int>& popV) { // write code here stack<int> st; int pushi = 0, popi = 0; while(pushi < pushV.size()) { st.push(pushV[pushi]); while(!st.empty() && st.top() == popV[popi]) { ++popi; st.pop(); } ++pushi; } if(st.empty()) return true; else return false; } };

150. 逆波兰表达式求值 - 力扣(LeetCode)

平时我们写的都叫做中缀表达式,就比如1+(2-3)*4+5,后缀表达式就是运算符按优先级排列且挨着要运算的运算数。1+(2-3)*4+5转后缀就为123-4*+5+。本题直接给了我们一个后缀表达式让我们计算,利用栈来解决,便利字符串,便利到操作数就入栈,便利到操作符就出栈两个数字,来配合操作符运算后再入栈,以此往复。

class Solution { public: int evalRPN(vector<string>& tokens) { stack<int> st; for(auto &s : tokens) { // 判断是否是运算符 //由于tokens里的是字符串,所以无法判断数字字符串 if(s == "+" || s == "-" || s == "*" || s == "/") { int x = st.top(); st.pop(); int y = st.top(); st.pop(); int res = 0; if(s == "+") res = y + x; else if(s == "-") res = y - x; else if(s == "*") res = y * x; else res = y / x; st.push(res); } else { // 不是运算符,转为数字入栈(支持负数"-123") st.push(stoi(s)); } } return st.top(); } };
http://www.jsqmd.com/news/1254675/

相关文章:

  • 【计算机毕业设计案例】基于 Django 框架的智慧校园学生宿舍信息化管理系统 高校宿舍人员入住退宿管理系统设计(程序+文档+讲解+定制)
  • 零基础玩转bWAPP靶场(十六):SQL 注入(POST/选择型)
  • TPS65988双端口Type-C PD控制器PCB布局布线实战指南
  • Agentic AI 看着能自主执行,为什么一进团队协作就频频翻车?
  • 古代情绪调控技术:鬼谷子七术与现代心理学的融合
  • 2026武汉江汉家用空调维修二手空调回收清洗攻略 - LYL仔仔
  • 2026 年 7 月最新 —— 青岛市南防水补漏哪家正规?从检测报价质保合同 4 项看 - 超人防水
  • 把喇叭贴在麦克风边上,还能全双工通话?——AU-60把“不可能”变成了“常规操作”
  • 网盘解除限速?速度可以拉满,2026亲测满速可用!
  • 眉山食品纸箱厂,居然踩坑3次才找到靠谱的?
  • AI工具paperxie如何提升学术论文写作效率
  • 分清督促与管控的界限,减少束缚保留孩子自主空间
  • 深圳欧米茄维修售后服务中心 2026 年 7 月更新:深圳欧米茄手表维修店地址在哪里 + 售后电话 400-883-8097 - 欧米茄中国售后中心
  • 2026 年保定名表回收市场稳步发展 恒益奢品汇规范服务信息公示 - 米諾
  • 深入解析TI ADS7851评估套件:从硬件设计到软件实操的全流程指南
  • Docker容器内操作MySQL的实战指南
  • 【老视频修复AI实战指南】:20年影像工程师亲授3大修复瓶颈突破法,90%画质提升实测有效
  • Unity安卓开发:调用C/C++ .so库实现高性能与SDK集成
  • 用户讨论:小鹏图灵芯片量产前,智能底座负责人为何离职
  • Godot逆向工程实战:GDSDecomp工作流与资源提取全解析
  • AI如何革新学术PPT制作:从耗时排版到智能生成
  • AIENC+AEC+BF三核加持,AU-60如何重新定义语音模组的“工程天花板”?
  • 大语言模型训练实战:从硬件选型到部署优化
  • UCD3138数字电源开发实战:从环境搭建到环路调试全解析
  • 变压器变比误差过大意味着什么?原因与风险解析 - HVHIPOT
  • 【计算机毕业设计案例】基于 Django 的中医药膳配方管理与个性化推荐平台 智慧中医慢病食疗养生服务平台设计(程序+文档+讲解+定制)
  • 无锡亨得利名表服务中心门店地址(2026年7月最新版) - 亨得利腕表维修中心
  • Amphenol ICC RJE1Y36D57C42401线束组件解析:连接可靠性与替代方案探讨
  • AI智能写作工具在学术开题报告中的应用与技巧
  • Godot游戏开发:集成Ink脚本语言实现动态分支叙事系统