https://leetcode-cn.com/problems/min-stack/
栈的实现,
使用链表,实现栈
解题思路,使用辅助栈
这是一道使用辅助栈的简单题,思路清晰
思路:
定义两个栈,主栈正常存,辅助栈每次存入当前栈元素中的最小值
每次取出min,就是从待出栈元素中的min
每入一个元素,就在辅助栈中入当前元素中的最小值,然后每次取出min,就是每次待出栈元素中的最小值
class MinStack {
//初始化栈。
//采用两个栈,额外的栈用来存最小值
Deque<Integer> xStack;
Deque<Integer> minStack;
public MinStack() {
xStack = new LinkedList<Integer>();
minStack = new LinkedList<Integer>();
minStack.push(Integer.MAX_VALUE);
}
//入栈操作
public void push(int val) {
xStack.push(val);
//只存最小值
minStack.push(Math.min(minStack.peek(),val));
}
//出栈操作
public void pop() {
xStack.pop();
minStack.pop();
}
//获取堆栈顶元素
public int top() {
return xStack.peek(); //获取堆栈顶元素,但是不弹出该元素
}
public int getMin() {
return minStack.peek();//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();
*/
栈的基操:
Stack.peek()
peek()函数返回栈顶的元素,但不弹出该栈顶元素。
Stack.pop()
pop()函数返回栈顶的元素,并且将该栈顶元素出栈。
void push(int val) 将元素val推入堆栈。
相关题目
2016. 增量元素之间的最大差值