题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
题目解析
题目中没有空间的要求,所这个可以定义两个栈,一个正常存储加入和删除的值,一个记录此时对应的最小值。
Python实现
python实现用起来感觉没有C++熟悉,还得多用
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.s = []
self.mins = []
def push(self, x: int) -> None:
self.s.append(x)
if len(self.mins) == 0:
self.mins.append(x)
else:
self.min_x = self.mins[-1]
if self.min_x < x:
self.mins.append(self.min_x)
else:
self.mins.append(x)
def pop(self) -> None:
self.s.pop()
self.mins.pop()
def top(self) -> int:
return self.s[-1]
def min(self) -> int:
return self.mins[-1]
C++实现
class MinStack
{
public:
/** initialize your data structure here. */
stack<int>S1;
stack<int>minS;
MinStack() {
}
void push(int x) {
S1.push(x);
if(minS.size()==0)
{
minS.push(x);
}
else
{
if(minS.top()<x)
{
minS.push(minS.top());
}
else
{
minS.push(x);
}
}
}
void pop() {
S1.pop();
minS.pop();
}
int top()
{
return S1.top();
}
int min()
{
int mx = minS.top();
return mx;
}
public: