剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
提示:
1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用
理解题意
使用两个栈实现队列的入队和出队功能,栈只支持压栈和出栈操作
题解
- 直接往stack1里压栈,出栈的时候从stack2里出;
- stack2里出没了,再把stack1里的放到stack2里,再接着出
1 | class CQueue { |
剑指 Offer 30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
1 | MinStack minStack = new MinStack(); |
提示:
- 各函数的调用总次数不超过 20000 次
理解题意
能够实时获得当前栈中的最小值,使用辅助栈存储每个元素入栈时的最小值,当元素出栈,其对应的最小值也相应出栈。
题解
使用一个minSt
辅助栈来存放较小的值
每次入栈时,如果要入栈的数小于等于辅助栈顶的数,就把待入栈的数也压入辅助栈中,辅助栈就用来返回当前的最小值.
1 | class MinStack { |