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

代码随想录算法训练营第九天|232.用栈实现队列,225.用队列实现栈,20.有效的括号,1047.删除字符串中的所有相邻重复项

232.用栈实现队列

看到题目的第一想法

熟悉栈的操作

看完代码随想录的第一想法

用栈模拟队列需要定义输入栈和输出栈,将内容放到输入栈中,再将内容放到输出栈中,取出来就是队列的先进先出

用自己的话描述

设置两个栈 stackIn 和 stackOut。push 操作直接压入 stackIn。pop/peek 操作时,如果 stackOut 为空,就把 stackIn 的所有元素依次弹出并压入 stackOut(这样顺序就反转了,相当于队列的先进先出)。然后从 stackOut 弹出/查看顶部元素。关键点是 dumpstackIn() 只在 stackOut 为空时才执行,均摊时间复杂度 O(1)。

代码
classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;publicMyQueue(){stackIn=newStack<>();stackOut=newStack<>();}publicvoidpush(intx){stackIn.push(x);}publicintpop(){dumpstackIn();returnstackOut.pop();}publicintpeek(){dumpstackIn();returnstackOut.peek();}publicbooleanempty(){returnstackIn.isEmpty()&&stackOut.isEmpty();}privatevoiddumpstackIn(){if(!stackOut.isEmpty())return;while(!stackIn.isEmpty()){stackOut.push(stackIn.pop());}}}

实现过程中遇到哪些困难

没有困难

今日收获,记录一下自己的学习时长

学习时长:18 分钟


225.用队列实现栈

看到题目的第一想法

模拟栈操作,用一个队列好像没有好方法,用两个队列倒是有点思路

看完代码随想录的第一想法

确实是用两个队列来模拟栈

用自己的话描述

用两个队列模拟栈,直接让输入的元素进入副队列,然后将主队列的旧元素放到副元素的队尾即可,然后交换元素引用解决问题

代码
classMyStack{//先创建两个栈Queue<Integer>queue1;Queue<Integer>queue2;publicMyStack(){//堆两个栈进行初始化queue1=newLinkedList<>();queue2=newLinkedList<>();}publicvoidpush(intx){//先放入副队列queue2.offer(x);while(!queue1.isEmpty()){queue2.offer(queue1.poll());}//交换引用Queue<Integer>queueTemp;queueTemp=queue1;queue1=queue2;queue2=queueTemp;}publicintpop(){//直接弹出队头元素returnqueue1.poll();}publicinttop(){//查看队头元素returnqueue1.peek();}publicbooleanempty(){//主队列不为空returnqueue1.isEmpty();}}/** * 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(); * boolean param_4 = obj.empty(); */

实现过程中遇到哪些困难

没什么困难,就是语法不熟悉

今日收获,记录一下自己的学习时长

收获了队列语法的使用,学习时长:20 分钟


20.有效的括号

看到题目的第一想法

将符号一一对应消除确实是没想法

看完代码随想录的第一想法

用栈这个数据结构确实是可以解决

用自己的话描述

了解了数据结构用简单的if判断一下很快就出来了。总体而言就是,先把内容放进去,然后再判断是否对应然后进行弹出,只不过我代码里的把内容放进去是在判断的字符的后面,不过也必须要在判断字符的后面,因为字符内容需要先判断清楚才能放入

代码
classSolution{publicbooleanisValid(Strings){//先定义一个栈Stack<Character>stack=newStack<>();for(charc:s.toCharArray()){//判断字符的另一半,如果存在就弹出,如果不存在就存入if(c==')'&&!stack.isEmpty()&&stack.peek()=='('){stack.pop();}elseif(c=='}'&&!stack.isEmpty()&&stack.peek()=='{'){stack.pop();}elseif(c==']'&&!stack.isEmpty()&&stack.peek()=='['){stack.pop();}else{stack.push(c);}}//如果stack为空那就正常,返回true反之为falsereturnstack.isEmpty();}}

实现过程中遇到哪些困难

对栈的类不太熟悉,思路不清晰

今日收获,记录一下自己的学习时长

学习到了 Stack 这个栈,学习时长:16 分钟(9:42-9:58)


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

看到题目的第一想法

都是消消乐的类型,应该也是用到栈去解决

看完代码随想录的第一想法

确实是用到了栈这个数据结构,消消乐的思想和上一题基本差不多,不过这题学习新的类

用自己的话描述

将字符串拆成一个个字符放入栈,每一次放入都看看栈顶是不是不一样或空,符合就放入,发现一样就拿出栈顶元素,剩下的就是倒序的字符了,然后排个序即可

代码
classSolution{publicStringremoveDuplicates(Strings){//定义一个双端队列来做栈,一个字符变量(用来接单个字符)ArrayDeque<Character>deque=newArrayDeque<>();charc;//遍历字符串,如果栈为空,或栈顶元素不一样就放进去,如果发现一样就消除for(inti=0;i<s.length();i++){c=s.charAt(i);if(deque.isEmpty()||deque.peek()!=c){deque.push(c);}else{deque.pop();}}//剩下的元素就是删除所有相邻重复项之后的元素,但是为倒序Stringstr="";//倒序数特殊处理一下while(!deque.isEmpty()){str=deque.pop()+str;}returnstr;}}

实现过程中遇到哪些困难

不了解 ArrayDeque 这个数据结构

今日收获,记录一下自己的学习时长

了解了 ArrayDeque 这个数据结构,学习时长:28 分钟(10:05-10:33)

http://www.jsqmd.com/news/1404863/

相关文章:

  • GEO服务商说“覆盖12+大模型”,到底覆盖了什么?三种注水方式与验证方法
  • 选智能呼叫系统,别再被SaaS“按月付费”割韭菜了
  • 实测5家知名GEO系统哪个好:技术交付ROI全维度对比 - 资讯报道
  • Excel文本处理进阶:三种方法精准定位字符串中最后一个特定字符
  • .NET AI智能体集成Python代码执行引擎:安全架构与工程实践
  • 加蓬COC认证上海本地办理成本优化指南 附合规服务机构参考 - 互联网科技品牌测评
  • Flex与Grid布局实战:解决前端自适应核心难题
  • 2026年8月北京石景山离婚律所哪家好?4家高性价比律所对比分析 - 品牌深度评测
  • 汽配维修门店怎么靠GEO把周边车主引过来 - 科技前沿信息
  • 15 分钟上手 Header Editor:从改请求头到拦截请求的完整清单
  • 最新(8月15日)Vscode的Codex扩展出现Codex could not start,The extension couldn‘t load its resources问题的解决方法
  • 2026年8月GEO优化头部公司全景盘点:深度测评与选型避坑清单 - 资讯报道
  • 全网比价订酒店app?2026年暑期海边度假订房省钱实操攻略 - 资讯报道
  • 告别淘汰焦虑:OpenCore Legacy Patcher 让老款 Intel Mac 重获最新 macOS 的完整指南
  • VortMall v1.3.15 支付能力升级:Apple Pay、汇付与拉卡拉配置及适用场景
  • 免费开源的 PDF 文件对比神器:diff-pdf 完整上手指南
  • CA-ZOO:曲率感知零阶优化实现低内存测试时自适应
  • OpenClaw+轻量云:自建AI知识库实现秒级检索与成本优化实战
  • 老款Mac升级macOS终极指南:OpenCore Legacy Patcher让十年旧机3步重获新生
  • 会计转销售怎么应对客户压价和拒绝,应对话术方法 - 欢欢在创业
  • 探亲出行怎么选住宿?差评少的订酒店app:2026零套路订房实操攻略 - 资讯报道
  • Keil MDK-ARM安装与svdconv错误解决:嵌入式开发环境搭建避坑指南
  • 大模型API平台怎么选?数眼智能与国内主流平台深度对比
  • B站直播OBS终极指南:从推流码到高清画质的专业设置
  • 2026年数学建模国赛高教社杯D题算法(61):排队论(M/M/1, M/M/c)稳态指标计算及其在医疗资源优化中的应用 ——基于2026年数学建模视角的综合研究
  • 2026年8月北京门头沟离婚律所哪家口碑好?6家本地律所深度盘点 - 品牌深度评测
  • 会计转销售怎么跟进客户不流失 - 欢欢在创业
  • 被问爆的8款论文AI工具✨真心好用不踩雷|亲测安利
  • 牛客网SQL入门实战:从基础查询到多表连接的系统学习路径
  • 韶山本地除甲醛公司怎么选?从资质、案例、售后多角度深度测评 - 专注室内空气检测治理