剑指 Offer 09. 用两个栈实现队列bahttps://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/
| 2023-9-26
0  |  阅读时长 0 分钟
Date
Jul 26, 2023
need_review
need_review
type
剑指 Offer(第 2 版)
undo
undo
难度
简单
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
示例 2:
提示:
  • 1 <= values <= 10000
  • 最多会对 appendTail、deleteHead 进行 10000 次调用

  • 栈的特性: 先进后出
  • 队列的特性: 先进先出
解法1 stack_1 -> stack_2 -> 取出值 -> stack_1, 每次删除头部的时候, 都把stack_1导到stack_2, 删完再倒回去.
notion image
解法2 优化解法1, 导到stack_2之后不倒回去, 删除头部时如果stack_2不空, 就继续删stack_2
notion image

读者来到图书馆排队借还书,图书管理员使用两个书车来完成整理借还书的任务。书车中的书从下往上叠加存放,图书管理员每次只能拿取书车顶部的书。排队的读者会有两种操作:
  • push(bookID):把借阅的书籍还到图书馆。
  • pop():从图书馆中借出书籍。
为了保持图书的顺序,图书管理员每次取出供读者借阅的书籍是 最早 归还到图书馆的书籍。你需要返回 每次读者借出书的值 。
如果没有归还的书可以取出,返回 -1 。
示例 1:
提示:
  • 1 <= bookID <= 10000
  • 最多会对 pushpop 进行 10000 次调用
 
  • Giscus
目录