持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
写在前面
今天的这道题,还是难度为简单等级,先刷简单,再刷中等的。
《最小栈》,题目的关键字就体现出来了,栈,接连了几个数据结构的学习,让我收获不少。
赶紧一起来看一下这道题吧。
题目解读
从题目的标题就知道是关于栈的。
从题目的描述上来看,是需要我们实现一个类的四个方法,外加一个构造函数。
其中包含了平时栈数据结构常用的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();
*/
执行结果:
其他思路
我看到有些大佬竟然手写了一个栈,简直不要太厉害,大家也可以去玩一下。
总结
今天的这道题,主要就是考察对栈这个数据结构的了解,只要对栈数据结构有一定的理解,就可以完成这道题的解答了。