問題の説明
以下のスタックを使用してキューの実装:
プッシュ(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==[]