【スタックとキュー】剣指Offer:min関数を含むスタック


【オンラインプログラミング】min関数を含むスタック
【問題の説明】
スタックのデータ構造を定義し、スタックに含まれる最小要素を得ることができるmin関数(時間複雑度はO(1))をこのタイプで実装します.
【解題構想&Java実現】
方法:stackスタックはデータを格納し、補助スタックminを借りてstackの各状態における最小値を同期的に記録するために使用される.すなわち、minのスタックトップは常に現在のstackスタックの最小要素を保持するため、stackスタックがpush操作を行う際、nodeとminスタックトップ要素の大きさを比較し、minスタックにpushの小さい値を与える.stackがpop操作を行う場合、minに対してpop操作を同時に行う.注意:popはスタックを削除するスタックトップ要素であり、peekはスタックを返すスタックトップ要素であるが、削除しない.
import java.util.Stack;

public class Solution {

    Stack<Integer> stack = new Stack<>();
    Stack<Integer> min = new Stack<>();

    public void push(int node) {
        stack.push(node);

        if (min.isEmpty() || node < min.peek()) {
            min.push(node);
        } else {
            min.push(min.peek());
        }

    }

    public void pop() {
        if (stack.isEmpty()) {
            throw new RuntimeException("Stack is empty!");
        }
        
        stack.pop();
        min.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int min() {
        return min.peek();
    }
}