包含min函式的棧(Java)
阿新 • • 發佈:2018-12-19
連結
題目描述
定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。
思路
我們需要實現四個函式push(), pop(), top(), min() 這四個函式是相輔相成的,我們藉助兩個棧來實現這樣的功能。 其中一個就是正常的棧onstack,還有一個是存放最小值的棧minstack。 在每個函式中,正常的棧就正常保持原來那樣操作,同時最小值棧也要進行相應的處理,min()函式返回的就是最小值棧的棧頂,所以每次遇到比棧頂更小的值都要壓入
程式碼
import java.util.Stack; public class Solution { private Stack<Integer> onstack = new Stack<Integer>(); private Stack<Integer> minstack = new Stack<Integer>(); private int size; private int min = Integer.MAX_VALUE; public void push(int node) { if(minstack.isEmpty()){ minstack.push(node); } else if(node <= min()){ //這裡一定要有等於號!!! minstack.push(node); } onstack.push(node); } public void pop() { int value = onstack.pop(); //當普通棧的棧頂值和最小值一樣 最小值棧彈出 if(value == min()){ minstack.pop(); } } public int top() { return onstack.peek(); } public int min() { return minstack.peek(); } }