我正在参加「掘金·启航计划」,这是我的第 1 篇文章。
他来了,9 月算法第 2 篇,继续肝 “栈”相关。初衷:结合 Go 刷刷算法题目,提升算法水平的同时复习一下 Go 基础。 题外话:最近大厂裁员的消息很多,整个行情非常的低迷,我们要从现在开始准备起来!GO
放低心态、认真学习,机会总是留给不断努力的自己
题目描述
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
- MinStack() 初始化堆栈对象。
- void push(int val) 将元素val推入堆栈。
- void pop() 删除堆栈顶部的元素。
- int top() 获取堆栈顶部的元素。
- int getMin() 获取堆栈中的最小元素。
样例1:
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
提示:
- -231 <= val <= 231 - 1
- pop、top 和 getMin 操作总是在 非空栈 上调用
- push, pop, top, and getMin最多被调用 3 * 104 次
解题思路分析
使用 2 个栈
- Stack 栈中存储所有的元素,保证在 top 操作是栈顶保持正确的元素返回
- MinStack 栈中存放最小的元素,每次调用 GetMin 取出栈顶元素就是所有元素中最小的数
- 每次 Push 压栈时,Stack 正常入栈,判断 MinStack 如果比栈顶的小,则 Push 进入到 MinStack 中,否则不操作 push。
- 每次 Pop 时,Stack & MinStack 正常出栈
AC 提交
结果
总结
本道题是一个很经典的栈实现题。要求实现一个栈的类,实现 push()、pop()、top()、getMin()。
最后
感谢阅读,欢迎点赞、关注、评论,持续更新中。