关于java:写点算法题剑指-Offer-30-包含min函数的栈

class MinStack {
    private Stack<Integer> dataStack; // 用于存储数据的栈
    private Stack<Integer> minStack; // 用于存储最小值的栈

    /** 初始化MinStack */
    public MinStack() {
        dataStack = new Stack<>(); // 初始化存储数据的栈
        minStack = new Stack<>(); // 初始化存储最小值的栈
    }

    /** 将元素x推到栈顶 */
    public void push(int x) {
        dataStack.push(x); // 数据栈间接将x推到栈顶
        if (minStack.isEmpty() || x <= minStack.peek()) { // 如果最小值栈为空或者x<=最小值栈顶,将x推到最小值栈顶
            minStack.push(x);
        }
    }

    /** 删除栈顶元素 */
    public void pop() {
        if (!dataStack.isEmpty()) { // 如果数据栈不为空
            int top = dataStack.pop(); // 删除数据栈顶并获取栈顶元素值
            if (top == minStack.peek()) { // 如果删除的元素是最小值栈顶元素
                minStack.pop(); // 将最小值栈顶元素也删除
            }
        }
    }

    /** 返回栈顶元素 */
    public int top() {
        if (!dataStack.isEmpty()) { // 如果数据栈不为空
            return dataStack.peek(); // 间接返回数据栈顶元素
        }
        return -1; // 其余状况返回-1,也能够抛出异样
    }

    /** 返回栈的最小元素 */
    public int min() {
        if (!minStack.isEmpty()) { // 如果最小值栈不为空
            return minStack.peek(); // 返回最小值栈顶元素
        }
        return -1; // 其余状况返回-1,也能够抛出异样
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理