leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
思路
左神講過的經典算法,維護兩個棧:
- stack,用來存儲數據
- minStack,用來存儲每個位置情況下的最小值,類似于動態規劃。
每次入棧2個元素,一個是入棧的元素本身,一個是當前棧元素的最小值。
直接上例子,一看就明白了。
輸入:
["MinStack","push","push","push","push","getMin","pop","getMin","pop","getMin","pop","getMin"] [[],[2],[0],[3],[0],[],[],[],[],[],[],[]]預期結果:
[null,null,null,null,null,0,null,0,null,0,null,2]過程詳解:
push/pop 第 0 個元素之后: stack: 2 minStack: 2 push/pop 第 1 個元素之后: stack: 2 0 minStack: 2 0 push/pop 第 2 個元素之后: stack: 2 0 3 minStack: 2 0 0 push/pop 第 3 個元素之后: stack: 2 0 3 0 minStack: 2 0 0 0 push/pop 第 2 個元素之后: stack: 2 0 3 minStack: 2 0 0 push/pop 第 1 個元素之后: stack: 2 0 minStack: 2 0 push/pop 第 0 個元素之后: stack: 2 minStack: 2題解
class MinStack {int pos;int[] stack; // 普通棧int[] minStack; // 最小棧,存放當前位置最小值/*** initialize your data structure here.*/public MinStack() {stack = new int[10000];minStack = new int[10000];pos = -1;}public void push(int x) {pos++;stack[pos] = x;if (pos == 0)minStack[pos] = x;elseminStack[pos] = minStack[pos - 1] < x ? minStack[pos - 1] : x;print();}public void pop() {pos--;print();}public int top() {return stack[pos];}public int getMin() {return minStack[pos];}public void print() {System.out.println("\npush/pop 第 " + pos + " 個元素之后:");System.out.print("stack:\t\t");for (int i = 0; i <= pos; i++) {System.out.print(stack[i] + " ");}System.out.println();System.out.print("minStack:\t");for (int i = 0; i <= pos; i++) {System.out.print(minStack[i] + " ");}} }/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(x);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/總結
以上是生活随笔為你收集整理的leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 141. 环形链表(快
- 下一篇: P8-07-16 使用 Jenkins