トピック:
スタックデータ構造定義、スタック内で、関数minの最小数を見つけるために、スタックで実現タイプは、分を呼び出し、PUSH、POP時間複雑度はO(1)であります
アイデア:
最小要素のそれぞれは、(最小要素の両方の要素は、前にスタックにプッシュし、新しいより小さい値)をスタックアシスト別に保存されています。
最小の要素が補助スタックに押され、スタックは補助スタックを保存することができますたびに、常に最小の要素となっている場合は最小要素はデータスタックからポップ、および補助スタックの先頭の要素をポップされたときに、この時間は支援しますスタックの新しいトップの要素は次の最小であります
コードの実装:
輸入java.util.Stackを; パブリック クラス第十八{ プライベートスタック<整数>スタック= 新しいスタック<> (); プライベートスタック<整数> minStack = 新しいスタック<> (); 公共 ボイドプッシュ(INT データ){ stack.push(データ)。 もし(minStack.size()== 0 ||データ< minStack.peek()){ minStack.push(データ)。 } 他{ minStack.push(minStack.peek())。 } } 公共の int型のポップを()スロー例外 { IF(stack.size()== 0){ ( "栈已为空")新しい例外をスローします。 } INTデータ= stack.pop()。 minStack.pop(); 返すデータを、 } 公共 INT分()スロー例外 { {IF(stack.size()== 0) ("栈已为空")新しい例外をスローします。 } を返す)(minStack.peekします。 } }