最小栈 (leetcode 155)
一:解题思路
定义2个栈,一个栈st,另外一个栈min专门用来保存st栈的最小值。这样就可以在常数时间内检索到最小元素。
二:完整代码示例 (C++版和Java版)
方法一C++:
class MinStack { public: stack<int> st; stack<int> min; MinStack() { } void push(int x) { st.push(x); if (min.empty() || x <= getMin()) min.push(x); } void pop() { if (st.top() == getMin()) min.pop(); st.pop(); } int top() { return st.top(); } int getMin() { return min.top(); } };
方法一Java:
class MinStack { private Stack<Integer> st=new Stack<>(); private Stack<Integer> min=new Stack<>(); public MinStack() { } public void push(int x) { st.push(x); if(min.empty() || x<=getMin()) min.push(x); } public void pop() { if(st.peek()==getMin()) min.pop(); st.pop(); } public int top() { return st.peek(); } public int getMin() { return min.peek(); } }
方法一Python:
class MinStack: def __init__(self): self.m_st=[] self.m_min=[] def push(self, x: int) -> None: if not self.m_min or x<=self.getMin():self.m_min.append(x) self.m_st.append(x) def pop(self) -> None: if self.m_st[-1]==self.getMin():self.m_min.pop() self.m_st.pop() def top(self) -> int: return self.m_st[-1] def getMin(self) -> int: return self.m_min[-1]

浙公网安备 33010602011771号