設計棧,在O(1)的時間複雜內實現push,pop,min

設計一個棧,使它們在O(1)的時間複雜度內實現push,pop,min的操作,所謂min操作就是得到棧中最小的元素。
分析: 每個元素進棧前綁定當前最小值。
可以添加一個棧、數組,或設計自己的元素類

import java.util.Stack;
public class MyStack {

    private Stack<Integer> dataStack;
    private Stack<Integer> minStack;

    public MyStack(){
         dataStack = new Stack<Integer>();
         minStack = new Stack<Integer>();
    }

    void push(int e) {
        if(!dataStack.empty()) {
            dataStack.push(e);
            int minTop = minStack.peek();
            if(minTop>e) {
                minStack.push(e);
            }else {
                minStack.push(minTop);
            }
        }else {
            dataStack.push(e);
            minStack.push(e);
        }
    }
    Integer pop() {
        Integer top=0;
        if(!dataStack.empty()) {
            top = dataStack.pop();
            minStack.pop();
            return top;
        }
        return null;
    }
    Integer min() {
        if(!dataStack.empty()) {
            return minStack.peek();
        }
        return null;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyStack stack = new MyStack();

        int[] eles = {3,4,2,5};
        for (int i : eles) {
            stack.push(i);
        }
        System.out.println(stack.min());//2
        System.out.println(stack.pop());//5
        System.out.println(stack.pop());//2
        System.out.println(stack.min());//3
        stack.push(1);
        System.out.println(stack.min());

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章