写在前面
今天的这道题,还是难度为简单等级,先刷简单,再刷中等的。
《最小栈》,题目的关键字就体现出来了,栈,接连了几个数据结构的学习,让我收获不少。
赶紧一起来看一下这道题吧。
题目解读
从题目的标题就知道是关于栈的。
从题目的描述上来看,是需要我们实现一个类的四个方法,外加一个构造函数。
其中包含了平时栈数据结构常用的push、pop、top等方法操作。
更重要的是要实现一个获取堆栈中最小元素的一个方法。
那么这个方法要通过什么方式来实现呢,我这里想到的就是通过两个队列来分别存储不同的值。
其中一个队列存储每一次进入的值,另外一个队列存储所有数据中的最小值。
代码实现
本次执行的代码如下,使用的就是上面所说的双队列的解决方案,使用这个方案可以不用太麻烦的管理这些最小值最大值了。
class MinStack { Deque<Integer> stack; Deque<Integer> min; public MinStack() { stack = new LinkedList<>(); min = new LinkedList<>(); min.push(Integer.MAX_VALUE); } public void push(int x) { stack.push(x); min.push(Math.min(min.peek(), x)); } public void pop() { stack.pop(); min.pop(); } public int top() { return stack.peek(); } public int getMin() { return min.peek(); } } /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(val); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */
执行结果:
其他思路
我看到有些大佬竟然手写了一个栈,简直不要太厉害,大家也可以去玩一下。
总结
今天的这道题,主要就是考察对栈这个数据结构的了解,只要对栈数据结构有一定的理解,就可以完成这道题的解答了。