程序员代码面试

【算法题】设计一个有getMin功能的栈

2018-12-02  本文已影响0人  埋没随百草

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

解题思路

使用两个栈来实现,其中一个栈用来保存栈中的元素,另一个栈用来保存每一步操作对应的最小值。

实现代码

import java.util.Stack;

public class MyStack {
    private Stack<Integer> stackData;
    private Stack<Integer> stackMin;

    public MyStack() {
        this.stackData = new Stack<>();
        this.stackMin = new Stack<>();
    }

    public void push(int num) {
        stackData.push(num);
        if (stackMin.empty()) {
            stackMin.push(num);
        } else if (num < getMin()) {
            stackMin.push(num);
        } else {
            int min = stackMin.peek();
            stackMin.push(min);
        }
    }

    public int pop() {
        if (stackData.empty()) {
            throw new RuntimeException("Stack is empty");
        }
        this.stackMin.pop();
        return this.stackData.pop();
    }

    public int getMin() {
        if (stackData.empty()) {
            throw new RuntimeException("Stack is empty");
        }
        return this.stackMin.peek();
    }
}
上一篇下一篇

猜你喜欢

热点阅读