MyQueue-スタックを使用してキューを実装します

題名

先入れ先出しキューを実装するには、2つのスタックのみを使用してください。キューは、一般的なキューでサポートされているすべての操作(プッシュ、ポップ、ピーク、空)をサポートする必要があります。

MyQueueクラスを実装します。

void push(int x)要素xをキューの最後にプッシュします
int pop()キューの最初から削除し、要素を返します
int peek()キューの最初に要素を返します
boolean empty()キューの場合空の場合はtrueを返し、それ以外の場合はfalseを返します

説明:

標準のスタック操作のみを使用できます。つまり、上にプッシュ、上からピーク/ポップ、サイズ、および空の操作のみが有効です。

使用している言語はスタックをサポートしていない可能性があります。標準のスタック操作である限り、listまたはdeque(両端キュー)を使用してスタックをシミュレートできます。

上級:

各操作のO(1)償却時間でキューを実装できますか?言い換えると、操作の1つに時間がかかる場合でも、n個の操作を実行するための合計時間計算量はO(n)です。

例:

入力:
[「MyQueue」、「push」、「push」、「peek」、「pop」、「empty」]
[[]、[1]、[2]、[]、[]、[]]
出力:
[null、null、null、1、1、false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); //キューは次のとおりです:[1]
myQueue.push(2); //キューは次のとおりです:[1、2](左端はキューの先頭)
myQueue.peek(); // 1を
返しますmyQueue.pop(); // 1を返し、キューは[2]
myQueue.empty(); // falseを返します

促す:

1 <= x <= 9すべての操作が有効
であると
仮定して、プッシュ、ポップ、ピーク、および空を最大100回呼び出します(たとえば、空のキューはポップまたはピーク操作を呼び出しません)

関連トピックスタック設計

問題解決のアイデア

この質問は比較的単純です。スタックには先入れ先出しの性質があり、チームには先入れ先出しの性質があることを理解する必要があるだけです。
ここに画像の説明を挿入

コードデモ

class MyQueue {


    Stack<Integer> stack1;
    Stack<Integer> stack2;

    /** Initialize your data structure here. */
    public MyQueue() {
        stack1=new Stack<>();
        stack2=new Stack<>();

    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        if(!stack2.empty()) {
            while (!stack2.empty())
            {
                Integer pop = stack2.pop();
                stack1.push(pop);
            }
            stack1.push(x);
        }
        else
            stack1.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        if(!stack1.empty())
        {
            while (!stack1.empty())
            {
                Integer pop = stack1.pop();
                stack2.push(pop);
            }
            Integer res = stack2.pop();
            return res;
        }
        else
            return stack2.pop();

    }
    
    /** Get the front element. */
    public int peek() {
         if(!stack1.empty())
         {
             while (!stack1.empty())
             {
                 Integer pop = stack1.pop();
                 stack2.push(pop);
             }
             return stack2.peek();
         }
         else
             return stack2.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
          if(!stack1.empty())
          {
              return stack1.empty();
          }
          else
              return stack2.empty();
    }
}

効果のデモンストレーション

情報の
回答は成功しました:
実行時間:0ミリ秒、Javaユーザーの100.00%を打ち負かしました
メモリ消費量:36.6 MB、Javaユーザーの12.28%を打ち負かしました

おすすめ

転載: blog.csdn.net/tangshuai96/article/details/114384039