[leetcode]問題解答と解説。225. Implement Stack using Queues [JavaScript]

[leetcode]問題解答と解説。225. Implement Stack using Queues [JavaScript]

皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
leetCodeの使い方や解説ではなく実際に問題を解決するために何をしたか
をメモ書きして行きます

私はある決意をして今臨んでいます。
モチベーションを保つためだけにこれをやっています。

では今日のleetCode。
「225. Implement Stack using Queues」の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。

※下にある自分のコードは自分で設けた制限時間内に書けたところまです。

これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。

森田賢二のleetCode

森田賢二のleetCode

225. Implement Stack using Queues ルール

ざっくり和訳

2 つのキューだけを使用して、先入れ先出し(LIFO)スタックを実装しなさい。実装されたスタックは、通常のスタックのすべての機能 (push, top, pop, empty) をサポートする必要があります。

MyStack クラスを実装してください。

void push(int x) 要素 x をスタックの最上部にプッシュする。
int pop() スタックの一番上にある要素を取り除き、それを返す。
int top() スタックの一番上にある要素を返します。
boolean empty() スタックが空であれば真を、そうでなければ偽を返す。
注意事項

つまり、push to back、peek/pop from front、size および is empty の操作のみが有効である。
言語によっては、キューはネイティブにサポートされていないかもしれません。キューの標準的な操作のみを使用する限り、リストやdeque(ダブルエンド型キュー)を使用してキューをシミュレートすることができます。

Example 1:

Input
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
Output
[null, null, null, 2, 2, false]

Explanation
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // return 2
myStack.pop(); // return 2
myStack.empty(); // return False

225. Implement Stack using Queues 問題ページ

225. Implement Stack using Queues

225. Implement Stack using Queues

my code is ok

class MyStack {
   stack
    constructor() {
        this.stack = []
    }

    push(x) {
        this.stack.push(x)
    }

    pop() {
        return this.stack.pop()
    }

    top() {
        return this.stack[this.stack.length -1]
    }

    empty() {
        return this.stack.length === 0
    }
}

これは一発合格

225. Implement Stack using Queues。discussの中の一つの解答例

数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれないですね

JavaScriptでfilterされている、discussはこちらから

これが違う実装

225. Implement Stack using Queues

1

class MyQueue {
    queue;
    constructor() {
        this.queue = []
    }
    push(n: number) {
        this.queue.push(n)
    }
    peek(): (number | null) {
        return this.queue[0]
    }
    pop() {
        let r = this.peek();
        this.queue.shift()
        return r;
    }
    size() {
        return this.queue.length
    }
    isEmpth() {
        return this.queue.length == 0
    }
}

class MyStack {
    public Q;
    constructor() {
        this.Q = new MyQueue()
    }

    push(x: number): void {
        let l = this.Q.queue.length;
        this.Q.push(x)
        for(let i = 1; i <= l; i++) {
            let r = this.Q.pop();
            this.Q.push(r)
        }
    }

    pop(): number {
        return this.Q.pop()
    }

    top(): number {
        return this.Q.peek()
    }

    empty(): boolean {
        return this.Q.queue.length == 0
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * var obj = new MyStack()
 * obj.push(x)
 * var param_2 = obj.pop()
 * var param_3 = obj.top()
 * var param_4 = obj.empty()
 */

225. Implement Stack using Queuesをやってみて感想

  • WIP

カテゴリー leetCode