ソリューション:
- キューのFIFOであり、スタックの両方に、我々が最初にキューとの下位要素の効果を達成する必要があるので、要素うち、対向する位置に、最後のアウトである。
最初に考えた時、私たちは、キュー要素で実装する必要があります反転動作、
しかし、この問題を解決するためのアイデアは完全にちょうどキューの最後の要素を入れて、あなたはチームの先頭に移動することができ、逆実現されていない、あなたは同じ効果スタック(LIFO)を達成できるようにということ。 - 我々は、スタック要素要素の下部のためのチームヘッドを達成する必要があること。
方法1::私たちは、達成するために、2つのキューを使用して好適
:基本的な考え方は以下の通りである
)要素に現在のチームは、チームのプロセスキューでは、Xと仮定達成するために:(
- 私たちは、達成するために、2つのキューキューとヘルプを使用しています。キューは、ヘルプが補助キューメインキューです。
- 私たちは、シーケンシャル要素のヘルプのチームがキューに入れている、空になるまでキュー要素のためにチームとなっています。
- キューが空であるため、この時点で空である、我々は要素のチームへの再入力現在のチームに必要なキューは、xは、現在の要素は、チームへのSO x(スタックのために、それはスタックの一番下の要素である最初のチームになりました);とチームからのキューの優先度で、この時点で、私たちは、LIFOのスタックの同等を実現。
- キューとコピーの要素からさらに助けた後に来ています。
コードは以下の通りであります:
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:単一のキューを実現:
基本的な考え方
- キュー・プロセスで実装押し込みます。
- 最初は、キューxの現在の要素を入力します。
- そして、待ち行列の長さの現在の長さを取得し、
- 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