目录
思路分析
维护一个Smin
的栈, 这个Smin
保存的着前几个元素的最小值.
S: [-1,3,-4]
Smin: [-1,-1,-4]
加入一个x
S: [-1,3,-4,x]
Smin: [-1,-1,-4,min(-4,x)]
cpp
class Solution {
public:
stack<int> S,Smin;
void push(int value) {
int x = value;
S.push(x);
if(Smin.empty())Smin.push(x);
else Smin.push(x<Smin.top()?x:Smin.top());
}
void pop() {
S.pop();
Smin.pop();
}
int top() {
return S.top();
}
int min() {
return Smin.top();
}
};
python
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.S,self.Smin=[],[]
def push(self, node):
self.S.append(node)
if not self.Smin:self.Smin.append(node)
else:self.Smin.append(node if node<self.Smin[-1] else self.Smin[-1])
def pop(self):
self.S.pop()
self.Smin.pop()
def top(self):
return self.S[-1]
def min(self):
return self.Smin[-1]