LeetCode 155.最小栈
設(shè)計(jì)一個支持 push ,pop ,top 操作,并能在常數(shù)時間內(nèi)檢索到最小元素的棧。
實(shí)現(xiàn) MinStack 類:
MinStack() 初始化堆棧對象。
void push(int val) 將元素val推入堆棧。
void pop() 刪除堆棧頂部的元素。
int top() 獲取堆棧頂部的元素。
int getMin() 獲取堆棧中的最小元素。
示例 1:
輸入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
輸出:
[null,null,null,null,-3,null,0,-2]
解釋:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
提示:
1、-231 <= val <= 231 - 1
2、pop、top 和 getMin 操作總是在 非空棧 上調(diào)用
3、push, pop, top, and getMin最多被調(diào)用 3 * 104 次
思路:
建立一個正常棧,另外一個棧為最小棧
push方法:如果第二個元素大于第一個元素,則最小棧不入,正常棧入,反之,都入
pop方法:正常棧出,直到出的元素等于最小棧的棧頂元素,都出
代碼:
class MinStack {private Stack<Integer> stack;private Stack<Integer> minStack;public MinStack() {this.stack=new Stack<>();this.minStack=new Stack<>();}public void push(int val) {stack.push(val);if (minStack.empty()){minStack.push(val);}else {if (val<=minStack.peek()) {minStack.push(val);}}}public void pop() {if (stack.empty()){return;}int x=stack.pop();if (x==minStack.peek()){minStack.pop();}}public int top() {if (stack.empty()){return -1;}return stack.peek();}public int getMin() {if (minStack.empty()){return -1;}return minStack.peek();} }總結(jié)
以上是生活随笔為你收集整理的LeetCode 155.最小栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恶意代码分析实战 15 加壳与脱壳
- 下一篇: 原来 goim 是这样实现高并发