leetcode 155. 最小栈
生活随笔
收集整理的這篇文章主要介紹了
leetcode 155. 最小栈
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
難度:簡單
頻次:59
題目:
設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。
實現 MinStack 類:
MinStack() 初始化堆棧對象。
void push(int val) 將元素val推入堆棧。
void pop() 刪除堆棧頂部的元素。
int top() 獲取堆棧頂部的元素。
int getMin() 獲取堆棧中的最小元素。
解題思路: 用輔助棧||只用一個棧
用輔助棧注意:
- 因為提示里的pop等操作都是在非空棧上調用,所以不用考慮太多
- 初始化輔助棧后添加一個最大的整數
- 然后只要原來的棧進一個,就判斷值跟輔助棧頂的數哪個小,取小的直接再放輔助棧即可(這里不用把原來的騰出來)
- 然后出去 就兩個棧一起出去就行了,右邊的棧就記錄了最小值的取值歷史
代碼
class MinStack {public Stack<Integer> stack;public Stack<Integer> minstack;public MinStack() {stack=new Stack<Integer>();minstack=new Stack<Integer>();//最小棧先放入一個最大值,可以一開始不用判斷minstack.push(Integer.MAX_VALUE);}public void push(int val) {stack.push(val);minstack.push(Math.min(minstack.peek(),val));}public void pop() {stack.pop();minstack.pop();}public int top() {return stack.peek();}public int getMin() {return minstack.peek();} }/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/用一個棧思路還是還差不多,只不過存進去的是一個數組
代碼
class MinStack {public Stack<int []> stack;public MinStack() {stack=new Stack<int []>();}public void push(int val) {if(!stack.isEmpty()){stack.push(new int[] {val,Math.min(val,stack.peek()[1])});}else{stack.push(new int[] {val,val});}}public void pop() {stack.pop();}public int top() {return stack.peek()[0];}public int getMin() {return stack.peek()[1];} }/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/總結
以上是生活随笔為你收集整理的leetcode 155. 最小栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 226. 翻转二叉树
- 下一篇: leetcode 22. 括号生成