【leetcode 155】最小スタックJava問題解

1482 ワード

leetcode分類の下ですべての問題解は作者本人が比較した後に選んだ問題解であり、読みやすく、メンテナンス性に優れている.
問題ごとに1つの答えしかなく、煩雑で実用的でない案を避けるため、必ずしも最適解とは限らない.
push,pop,top操作をサポートし,定数時間で最小要素を取得できるスタックを設計した.
  • push(x)--要素xをスタックにプッシュします.
  • pop()--スタックトップの要素を削除します.
  • top()--スタックトップ要素を取得します.
  • getMin()--スタック内の最小要素を取得します.

  • 例:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   -->    -3.
    minStack.pop();
    minStack.top();      -->    0.
    minStack.getMin();   -->    -2.
    public class MinStack {
        Stack stack = new Stack();
        Stack minStack = new Stack();
        public void push(int x) {
            stack.push(x);
            if (minStack.isEmpty())
                minStack.push(x);
            else
                if (minStack.peek() > x)
                    minStack.push(x);
                else
                    minStack.push(minStack.peek());
    }
        public void pop() {
            if (!stack.isEmpty()) {
                stack.pop();
                minStack.pop();
            }
        }
        public int top() {
            return stack.peek();
        }
        public int getMin() {
            return minStack.peek();
        }
    }
    
    
    /**
     * Your MinStack object will be instantiated and called as such:
     * MinStack obj = new MinStack();
     * obj.push(x);
     * obj.pop();
     * int param_3 = obj.top();
     * int param_4 = obj.getMin();
     */

    考え方:
  • 自理