劍指offer每日一題算法題(java解法)
方便日後複習,從今天開始。
算法之行始於足下
[編程題]包含min函數的棧-- Java實現
------------------------------------------------------------------------------------------------------
題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。
前提:
1.熟悉棧的操作原理,進出規則。
2.瞭解棧的基本方法,push,pop,peek等
解題思路:
1.利用了一個輔助棧進行存值,每次給第一個棧存的時候,都要看看是不是比第二個棧裏的值大,不是的話就給第二個棧也push,這樣就能保證第二個棧的棧頂絕對是最小值.
2.出棧的時候,只有2個棧頂的值相等第二個棧纔會出棧,這樣保證了出去之後,下一個棧頂還是最小值
import java.util.Stack;
public class Solution {
Stack<Integer> stack1=new Stack<Integer>();
Stack<Integer> stack2=new Stack<Integer>();
public void push(int node) {
stack1.push(node);
if(stack2.empty()){
stack2.push(node);
}
if(stack1.peek()<=stack2.peek()){
stack2.push(node);
}
}
public void pop() {
if(stack1.peek()==stack2.peek()){
stack2.pop();
}
stack1.pop();
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}