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

贵阳建网站公司我的世界做指令的网站

贵阳建网站公司,我的世界做指令的网站,搭建自己的网站需要什么,企业黄页顺企网解析 LeetCode 225. 用队列实现栈:单队列的巧妙运用 一、题目分析(一)功能需求 实现 MyStack 类,支持栈的四种操作: push(int x):将元素压入栈顶。pop():移除并返回栈顶元素。top():…

解析 LeetCode 225. 用队列实现栈:单队列的巧妙运用

一、题目分析

在这里插入图片描述

(一)功能需求

实现 MyStack 类,支持栈的四种操作:

  • push(int x):将元素压入栈顶。
  • pop():移除并返回栈顶元素。
  • top():返回栈顶元素。
  • empty():判断栈是否为空。
    需用队列(本题代码用单队列 )模拟栈的 LIFO 特性。

(二)核心挑战

队列是先进先出(FIFO )结构,而栈是后入先出(LIFO )结构,如何通过队列操作模拟栈的“栈顶操作”是关键。

二、算法思想:单队列的反转操作

(一)核心思路

利用单队列,在每次 push 操作时,通过“将新元素入队后,把队列中之前的所有元素依次出队再入队”,让新元素移动到队列头部,从而模拟栈的“栈顶”位置。这样,队列的头部始终对应栈的栈顶,后续 poptop 操作可直接操作队列头部。

(二)操作逻辑

  • push 操作
    1. 新元素入队。
    2. 将队列中除新元素外的所有元素依次出队并重新入队。这样,新元素会被“移到”队列头部,成为栈顶。
  • pop 操作:直接弹出队列头部元素(对应栈顶 )。
  • top 操作:返回队列头部元素(对应栈顶 )。
  • empty 操作:判断队列是否为空。

三、代码实现与详细解析

class MyStack {// 用于模拟栈的队列,选择 LinkedList 实现队列(支持高效的入队、出队)Queue<Integer> queue; public MyStack() {// 初始化队列queue = new LinkedList<>(); }public void push(int x) {// 新元素入队queue.offer(x); int size = 0;// 遍历队列中除新元素外的所有元素(新元素是最后入队的,所以循环 size < 队列长度 - 1 次)while (size < queue.size() - 1) { // 队首元素出队,重新入队到队尾queue.offer(queue.poll()); size++;}}public int pop() {// 队列头部是栈顶,直接弹出return queue.poll(); }public int top() {// 队列头部是栈顶,直接返回return queue.peek(); }public boolean empty() {// 判断队列是否为空return queue.isEmpty(); }
}

(一)代码流程拆解

  1. 初始化queueLinkedList 实现(因 LinkedListQueue 接口的常用实现,支持高效的 offerpollpeek 操作 )。
  2. push 操作
    • 新元素 x 入队(queue.offer(x) )。
    • 循环 size < queue.size() - 1 次(size 初始为 0 ):每次将队首元素出队(queue.poll() )并重新入队(queue.offer(...) )。此操作让新元素前的所有元素“绕到”队列尾部,新元素成为队首,模拟栈顶。
  3. pop 操作:调用 queue.poll() 弹出队首元素(即栈顶 )。
  4. top 操作:调用 queue.peek() 返回队首元素(即栈顶 )。
  5. empty 操作:调用 queue.isEmpty() 判断队列是否为空,即栈是否为空。

(二)关键逻辑解析

  • push 操作的反转技巧:通过将新元素入队后,把之前的元素循环“出队再入队”,让新元素移动到队首。例如,队列原是 [a, b, c],入队 d 后变为 [a, b, c, d],循环 3 次(size < 4 - 1 ):
    • 第一次:a 出队入队 → [b, c, d, a]
    • 第二次:b 出队入队 → [c, d, a, b]
    • 第三次:c 出队入队 → [d, a, b, c]
      最终新元素 d 成为队首,对应栈顶。
  • 单队列的优势:相比双队列实现(一个队列存元素,一个队列辅助 ),单队列通过反转操作,减少了队列数量,代码更简洁,利用队列自身操作完成模拟。
  • 时间复杂度分析push 操作的时间复杂度为 O(n)n 是当前队列长度,需循环 n - 1 次 );poptopempty 操作的时间复杂度为 O(1)

四、复杂度分析

(一)时间复杂度

  • pushO(n)O(n)O(n)n 是当前栈中元素个数(需移动 n - 1 个元素 )。
  • popO(1)O(1)O(1) ,直接弹出队首。
  • topO(1)O(1)O(1) ,直接访问队首。
  • emptyO(1)O(1)O(1) ,直接判断队列是否为空。

(二)空间复杂度

所有操作仅使用一个队列,空间复杂度为 O(n)O(n)O(n)n 是栈中元素最大数量 )。

http://www.dtcms.com/a/518866.html

相关文章:

  • 443是端口网站建设深圳网站建设企
  • 学校网站建设目的做的网站打开显示无标题
  • 温州通业建设工程有限公司网站建设大型网站的公司
  • 做网站如何赚钱wordpress能做成app吗
  • 做海报的网站什么编辑器wordpress分页链接设置
  • 做网站带源码软件-dwwordpress更改作者信息
  • 怎么自己做推广网站求网站开发客户
  • 网站优化建设工作总结范文企业网站建设哪家公司好
  • 河北固安县网站建设网页设计师网站
  • 阿里云网站实名认证jsp网站架设
  • 网站建设培训公司哪家好化妆品网站程序
  • php网站上传教程什么是搜索引擎
  • 网站建设有哪些公司好延吉 网站建设
  • 怎么建立网站免费的wordpress视频直播插件
  • 新的网站的建设步骤jsp网站开发书籍推荐
  • 5g互联如何取消网站备案建设工程人员查询
  • 网站建设方向搜索网页内容
  • 长沙生活网seo优化方式
  • 济南 制作网站 公司吗成都分类信息网站开发
  • 凡科网建设网站如何修改源代码一个公司做两个网站可以吗
  • 自助建手机网站免费一个完整的网站推广方案
  • 网站收缩栏做化工资讯的网站
  • 昆明企业网站开发公司昆山张浦做网站
  • 网站建设注意哪些内容你会回来感谢我的正能量视频
  • 网站开发 精品课程电子商务网站建设管理论文
  • 东莞教育网站建设公园网站建设
  • 企业网站asp模板重庆住房和城乡建设厅网站
  • 模板网站的缺陷乐清 网站建设
  • 商务类网站青岛网站推广公司
  • 安徽省工程建设信息官方网站网页设计颜色代码表