Descripción del problema
aplicación de colas utilizando la siguiente pila:
push (x) - x elementos en la pila
pop () - quitar la parte superior de la pila
superior () - Obtiene el elemento superior
el tanque vacío () - Devuelve la pila está vacía
Nota:
Sólo puede utilizar el funcionamiento básico de la cola - que es, empujar hacia atrás, ojeada / pop de frente, tamaño, y está vacía de estas operaciones son legales.
El idioma que está utilizando no sea compatible con cola. Puede utilizar la lista o la deque (deque) para simular una cola, la cola, siempre y cuando la operación a la norma.
Usted puede asumir que todas las operaciones son válidos (por ejemplo, a una pila vacía no llama a la operación pop o superior).
Invertir la secuencia cuando la solución a un problema 1- pila
Después de usar una cola, se añade el elemento de la cola, antes de la N-1 elementos de inversión, el elemento superior permanece siempre en primer equipo
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 Pulse complejidad en tiempo (n), el pop-O (1)
El método de la pila de ajuste 2
O Pulse complejidad en tiempo (1), el pop-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==[]