乐趣区

关于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,也能够抛出异样
    }
}
退出移动版