leetcode-155-最小栈
题目描述:
方法一:辅助栈
class MinStack: def __init__(self): """ initialize your data structure here. """ self.stack = [] self.min_stack = [] def push(self, x: int) -> None: self.stack.append(x) if not self.min_stack or x <= self.min_stack[-1]: self.min_stack.append(x) def pop(self) -> None: if self.stack[-1] == self.min_stack[-1]: self.min_stack.pop() self.stack.pop() def top(self) -> int: return self.stack[-1] def getMin(self) -> int: if not self.min_stack: return None return self.min_stack[-1]
另:(更快)
class MinStack: def __init__(self): """ initialize your data structure here. """ self.curStack = [] self.minStack = [] def push(self, x: int) -> None: self.curStack.append(x) if len(self.minStack) == 0: self.minStack.append(x) elif x < self.minStack[-1]: self.minStack.append(x) else: self.minStack.append(self.minStack[-1]) def pop(self) -> None: self.curStack.pop() self.minStack.pop() def top(self) -> int: return self.curStack[-1] def getMin(self) -> int: return self.minStack[-1]
java:
class MinStack { private Stack<Integer> stack; private Stack<Integer> minStack; /** initialize your data structure here. */ public MinStack() { stack = new Stack<>(); minStack = new Stack<>(); } public void push(int x) { stack.push(x); if(!minStack.isEmpty()){ int top = minStack.peek(); if(x <= top) minStack.push(x); }else{ minStack.push(x); } } public void pop() { int pop = stack.pop(); int top = minStack.peek(); if(pop == top){ minStack.pop(); } } public int top() { return stack.peek(); } public int getMin() { return minStack.peek(); } }