LeetCodeスタックとキューアプリケーション——

 スタックとキューが解決できる古典的な問題は何ですか? すべての質問は私のホームページで見つけることができます。

(1) ブラケット合わせ問題(スタック)

(2)文字列重複排除問題(スタック)

  (3)逆ポーランド式問題(スタック)

(4) スライディングウィンドウ最大問題 (単調待ち行列) 

(5) 出現回数の多い上位 K 要素 (優先キュー)

(6) スタック実装キュー

(7) キュー実装スタック 

1.解決策 

 

class MyStack {

  
    Queue<Integer> queue1; // 和栈中保持一样元素的队列
    Queue<Integer> queue2; // 辅助队列

    /** Initialize your data structure here. */
    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }
    
    public void push(int x) {
        queue2.offer(x);
        while(!queue1.isEmpty()){
            queue2.offer(queue1.poll());
        }
         Queue<Integer> queueTemp = queue1;
         queue1 = queue2;
         queue2 = queueTemp;
    }
    
    public int pop() {
        return queue1.poll();
    }
    
    public int top() {
        return queue1.peek();
    }
    
    public boolean empty() {    
        return queue1.isEmpty();
    }
}

2.スタックの基礎知識

スタックの最も注目すべき機能は、先入れ後出しです。

1. Java でのスタックの一般的な実装クラス:

最も基本的な実装: Stack<Integer> stack=new Stack<>();

両端キューの実装: Deque<Integer> stack=new LinkedList<>();

2.スタックの一般的な方法

push(x) -- 要素をキューの末尾にプッシュします。
pop() -- キューの先頭から要素を削除します。
peek() -- キューの先頭にある要素を返します。
empty() -- キューが空かどうかを返します。

3.キューの基礎知識

キューの最も注目すべき機能は、先入れ先出しです。

1. Java でのキューの一般的な実装クラス:

通常のキュー: Queue<Integer> queue=new LinkedList<>();

両端キュー: Deque<Integer> queue=new LinkedList<>();

プライオリティ キュー: PriorityQueue<Integer> queue=new PriorityQueue<>();

2. キューの一般的な方法

add 要素を追加する キューがいっぱいの場合、IIIegaISlabEepeplian 例外をスローします remove
キューの先頭の要素を削除して返します キューが空の場合、NoSuchElementException 要素をスローします キューが空の場合、キュー
の先頭の要素を返します、次に NoSuchElementException をスローします

size 要素数
offer 要素を追加して true を返す キューがいっぱいの場合は false を返す
poll 削除してキューの先頭の要素を返す キューが空の場合は null を返す
peek キューの先頭の要素を返すキューが空の場合、null を返します


put 要素を追加し、キューがいっぱいの場合はブロックします。
take はキューの先頭にある要素を削除して返します。キューが空の場合はブロックします。

おすすめ

転載: blog.csdn.net/w20001118/article/details/127140364