225スタックは、キューleetcodeで実装しました

問題の説明

以下のスタックを使用してキューの実装:

プッシュ(X) -スタック上のx要素
ポップ() -スタックの上部除去
)(トップ-トップ要素を取得し
(空の) -スタックを返し、空である

ポップ/ PEEK、バックにプッシュです-あなただけのキューの基本的な操作を使用することができますサイズ、フロント、 およびこれらの操作の空で有効です。
使用している言語は、キューをサポートしていないかもしれません。あなたは長い間、標準の操作などとしてキュー、キューをシミュレートするために、リストまたは両端キュー(両端キュー)を使用することができます。
あなたはすべての操作は、(例えば、空のスタックにポップ操作やトップを呼び出すことはありません)有効であることを仮定してもよいです。

順序を逆にしたときに、問題の1-スタックへの解決策

キューを使用した後、キュー要素が逆のn-1の要素の前に、追加され、上部要素は、常に最初のチームのままで

class MyStack:

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


    def push(self, x: int) -> None:
        """
        Push element x onto stack.
        """
        self.my_queue.append(x)
        for i in range(len(self.my_queue)-1):
            self.my_queue.append(self.my_queue.pop(0))



    def pop(self) -> int:
        """
        Removes the element on top of the stack and returns that element.
        """
        return self.my_queue.pop(0)


    def top(self) -> int:
        """
        Get the top element.
        """
        return self.my_queue[0]


    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        return  not self.my_queue



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

プレス時の複雑さはO(n)、ポップ-O(1)
ここに画像を挿入説明

調整スタック2の方法

プレス時の複雑性O(1)、ポップ-O(N)

class MyStack:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.queue1=[]
        self.queue2=[]
        self.top_element=0

        


    def push(self, x: int) -> None:
        """
        Push element x onto stack.
        """
        self.queue1.append(x)
        self.top_element=x



    def pop(self) -> int:
        """
        Removes the element on top of the stack and returns that element.
        """
        item=0
        # 不加会一直报错local variable 'xxx' referenced before assignment
        #估计在for循环中只被当做for中局部变量
        for i in range(len(self.queue1)-1):
            item=self.queue1.pop(0)
            self.queue2.append(item)
        self.top_element=item
        target=self.queue1[0]
        self.queue1=self.queue2
        self.queue2=[]
        return target



    def top(self) -> int:
        """
        Get the top element.
        """
        return self.top_element


    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        return self.queue1==[]

ここに画像を挿入説明

公開された284元の記事 ウォン称賛19 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_39289876/article/details/104745961