day15 最小栈
前两天家里人生病,回去探望了一下。
读题
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack()初始化堆栈对象。void push(int val)将元素val推入堆栈。void pop()删除堆栈顶部的元素。int top()获取堆栈顶部的元素。int getMin()获取堆栈中的最小元素。
思路
仍然是实现类型的题目,知道栈是什么应该就好写。要求里的这一点可能比较难:能在常数时间内检索到最小元素。
要用什么数据结构实现这个栈?用 vector 吗?其他操作都可以实现,但是如何在常数时间内获取最小元素?事先保存吗?
1 | |
提交,发现有点小问题,输出不对:
1 | |
检查之后增加了空栈检查和引入了 climits 库,还用了.back() 这种相对规范的写法。
有代码:
1 | |
结果
通过了,0ms,22.57 MB 内存,比较领先的结果。
官方题解
方法一:辅助栈
使用一个栈来保存每个元素对应的最小值。而我的是只有一个数字来保存,所以每次出栈都需要遍历一下,更新最小值,属于是投机取巧的做法。
另外,直接使用了 stack 数据类型,而不是 vector。
收获
复习了栈的定义和 vector 的操作。虽然我过了但是是投机取巧的做法,正经做还是得空间换时间。
这题感觉有点无聊,何况是允许使用 stack 实现 stack。为啥会是中等?
注意到题解里写的是简单,感觉真实难度也确实是简单。
day15 最小栈
http://blog.wspdwzh.space/2025/11/08/day15-最小栈/