とスタック(パイソン)キューを実装leetcode 225

ここに画像を挿入説明
ソリューション:

  1. キューのFIFOであり、スタックの両方に、我々が最初にキューとの下位要素の効果を達成する必要があるので、要素うち、対向する位置に、最後のアウトである。
    最初に考えた時、私たちは、キュー要素で実装する必要があります反転動作、
    しかし、この問題を解決するためのアイデアは完全にちょうどキューの最後の要素を入れて、あなたはチームの先頭に移動することができ、逆実現されていない、あなたは同じ効果スタック(LIFO)を達成できるようにということ。
  2. 我々は、スタック要素要素の下部のためのチームヘッドを達成する必要があること。

方法1::私たちは、達成するために、2つのキューを使用して好適
:基本的な考え方は以下の通りである
)要素に現在のチームは、チームのプロセスキューでは、Xと仮定達成するために:(

  1. 私たちは、達成するために、2つのキューキューとヘルプを使用しています。キューは、ヘルプが補助キューメインキューです。
  2. 私たちは、シーケンシャル要素のヘルプのチームがキューに入れている、空になるまでキュー要素のためにチームとなっています。
  3. キューが空であるため、この時点で空である、我々は要素のチームへの再入力現在のチームに必要なキューは、xは、現在の要素は、チームへのSO x(スタックのために、それはスタックの一番下の要素である最初のチームになりました);とチームからのキューの優先度で、この時点で、私たちは、LIFOのスタックの同等を実現。
  4. キューとコピーの要素からさらに助けた後に来ています。
    コードは以下の通りであります:
class MyStack:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.queue = []
        self.help = []


    def push(self, x):
        """
        Push element x onto stack.
        """

        while len(self.queue) > 0:

            self.help.append(self.queue.pop(0))

        self.queue.append(x)

        while len(self.help) > 0:

            self.queue.append(self.help.pop(0))

    def pop(self) :
        """
        Removes the element on top of the stack and returns that element.
        """

        de = self.queue.pop(0)
        return de

    def top(self):
        """
        Get the top element.
        """
        de = self.queue[0]
        return de

    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        if len(self.queue) == 0:
            return True
        return False

方法2:単一のキューを実現:
基本的な考え方

  1. キュー・プロセスで実装押し込みます。
  2. 最初は、キューxの現在の要素を入力します。
  3. そして、待ち行列の長さの現在の長さを取得し、
  4. 1の長さと長さまで、無デキュー;最後に、順番にキューが再入力し、現在のキュー要素、チームの各要素、長さの減少値デキューをデキューし、この時点で、キュー要素の最初の要素でありますX、処理はLIFO効果が実現されるようにポップ。

コードは以下の通りであります:

class MyStack:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.queue = []
        

    def push(self, x):
        """
        Push element x onto stack.
        """

        self.queue.append(x)

        length = len(self.queue)

        while length > 1:

            self.queue.append(self.queue.pop(0))
            length -= 1


    def pop(self) :
        """
        Removes the element on top of the stack and returns that element.
        """

        de = self.queue.pop(0)
        return de



    def top(self):
        """
        Get the top element.
        """
        de = self.queue[0]
        return de

    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        if len(self.queue) == 0:
            return True
        return False
公開された100元の記事 ウォンの賞賛3 ビュー10000 +

おすすめ

転載: blog.csdn.net/cy_believ/article/details/104612729