LeetCode 155.Min Stack
阿新 • • 發佈:2018-11-12
也就是說,要用O(1)的複雜度拿到任意時刻的棧中的最小值,那麼自然就不可能去遍歷
所以,有這麼一種巧妙的方法,申請兩個棧,一個是原資料棧,一個是min_stack,min_stack中的棧頂始終存放的是當前資料棧的最小值,也就是說min棧和data棧的資料量是同時增加,同時減少的。
data棧放一個數時,min棧的棧頂和這個數進行比較,如果min棧棧頂比較小,那麼把min棧棧頂再push一次,如果新數x比較小,把min_stack.push()
java程式碼
class MinStack { Stack <Integer> data_stack; Stack <Integer> min_stack ; /** initialize your data structure here. */ public MinStack() { data_stack =new Stack<Integer>(); min_stack=new Stack<Integer>(); } public void push(int x) { data_stack.push(x); if(min_stack.empty()){ min_stack.push(x); } else{ int min_current=min_stack.peek(); if(min_current<x){ min_stack.push(min_current); } else{ min_stack.push(x); } } } public void pop() { if(!data_stack.empty()){ data_stack.pop(); min_stack.pop(); } } public int top() { int tmp=0; if(!data_stack.empty()){ tmp=data_stack.peek(); } return tmp; } public int getMin() { int tmp=0; if(!min_stack.empty()){ tmp=min_stack.peek(); } return tmp; } } /** * 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(); */