1.题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
2.算法描述
1.申请两个栈,dataStack,minStack。dataStack存储栈的元素,而minStack用来存储当前dataStack中的最小元素。
2.push,pop,top,min操作:
当push操作时:
dataStack直接入栈;如果minStack如果为空,则直接入栈,如果minStack不为空,则minStack入栈minStack栈顶和当前入栈元素的较小值。
当pop操作时:
dataStack和minStack分别弹出栈顶元素,且dataStack栈顶元素被返回。
当top操作时:
返回dataStack的栈顶元素。
当min操作时:
返回minStack的栈顶元素。
例如:
dataStack : 栈底 7 2 3 9 12 0 -9 2 -10 栈顶
minStack: 栈底 7 2 2 2 2 0 -9 - 9 -10 栈顶
3.代码描述
3.1.Java代码
import java.util.Stack;
public class Solution {
Stack<Integer> dataStack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
dataStack.push(node);
if(minStack.isEmpty()){
minStack.push(node);
}
else{
minStack.push(Math.min(node, minStack.peek()));
}
}
public void pop() {
dataStack.pop();
minStack.pop();
}
public int top() {
return dataStack.peek();
}
public int min() {
return minStack.peek();
}
}
3.2.Python代码
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.dataStack = []
self.minStack = []
def push(self, node):
# write code here
self.dataStack.append(node)
if not self.minStack:
self.minStack.append(node)
else:
self.minStack.append(min(node, self.minStack[-1]))
def pop(self):
self.minStack.pop()
return self.dataStack.pop()
def top(self):
return self.dataStack[-1]
def min(self):
return self.minStack[-1]