这是一道 中等难度 的题。
题目来自:https://leetcode.cn/problems/min-stack/
题目
实现 MinStack 类:
-
MinStack() 初始化堆栈对象。 -
void push(int val) 将元素val推入堆栈。 -
void pop() 删除堆栈顶部的元素。 -
int top() 获取堆栈顶部的元素。 -
int getMin() 获取堆栈中的最小元素。
提示:
-
-
pop、top 和 getMin 操作总是在 非空栈 上调用
-
push, pop, top, and getMin最多被调用次
解题思路
这道题的重点是 getMin()用常数时间获取栈中的最小元素,其他几点是栈本身就支持了的功能。
-
元素入栈时就计算出对应的最小值,并将最小值和入栈元素以对应的关系关联存储。 -
元素入栈时不做处理,获取最小值的时候实时计算。
-
那么入栈时存储的数据依次为: -
{-1, -1} -
{1, -1} -
{2, -1} -
{-2, -2} -
删除栈顶元素:直接删除栈顶数组即可,原始数据和最小值被一同删除。
-
获取栈顶元素:获取到栈顶数组的第一个位置存放的值。
-
获取最小值:获取到栈顶数组的第二个位置存放的值。
代码实现
class MinStack {
private Deque<int[]> stack;
public MinStack() {
stack = new LinkedList<>();
}
public void push(int val) {
int min = val;
if(!stack.isEmpty()){
int[] topArr = stack.peek();
int preMin = topArr[1];
if(preMin < min){
min = preMin;
}
}
stack.push(new int[]{val, min});
}
public void pop() {
stack.pop();
}
public int top() {
int[] topArr = stack.peek();
return topArr[0];
}
public int getMin() {
int[] topArr = stack.peek();
return topArr[1];
}
}
点个
原文始发于微信公众号(i余数):【算法题解】15. 设计最小栈
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/193984.html