[Sword se refiere a oferta] - 09. Implementando una cola con dos pilas

tema:

Implementar una cola con dos pilas. La declaración de la cola es la siguiente, implemente sus dos funciones, appendTail y deleteHead. Complete las funciones de insertar enteros al final de la cola y eliminar enteros al principio de la cola, respectivamente. (Si no hay elementos en la cola, la operación deleteHead devuelve -1).

Ejemplo 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
复制代码

Ejemplo 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
复制代码

insinuación:

  • 1 <= valores <= 10000
  • Hará hasta 10000 llamadas a appendTail, deleteHead

Ideas para resolver problemas:

La pila no puede implementar la función de cola: el elemento en la parte inferior de la pila (correspondiente al primer elemento de la cola) no se puede eliminar directamente, y todos los elementos anteriores deben sacarse de la pila.

La pila doble puede realizar el orden inverso de la lista: hay una pila A=[1, 2, 3] con tres elementos y una pila vacía B=[]. Si el elemento A se extrae de la pila y se agrega a la pila B hasta que la pila A está vacía, entonces A = [], B = [3, 2, ], es decir, los elementos de la pila B implementan el orden inverso de los elementos de la pila A.

Usa la pila B para eliminar el primer elemento del equipo: Después del orden inverso, cuando B realiza un popping, es equivalente a eliminar el elemento inferior de la pila de A, es decir, el primer elemento correspondiente del equipo.

Diseño de funciones:

El título solo requiere el funcionamiento normal de las dos funciones: appendTail() al final de la cola y deleteHead() para eliminar la cabeza de la cola. Por lo tanto, podemos diseñar la pila A para agregar la cola de la cola y la pila B para invertir los elementos, a fin de eliminar la cabeza de la cola.

  • Agregue la función appendTail() al final de la cola: agregue el número val a la pila A.
  • Elimine la función deleteHead() del jefe de equipo: Existen las siguientes tres situaciones.

①Cuando la pila B no está vacía, todavía hay elementos en B que se han invertido, por lo que el elemento superior de la pila de B se devuelve directamente

②De lo contrario, cuando A está vacío, es decir, ambas pilas están vacías y no tienen elementos, por lo que devuelve -1

③ De lo contrario, transfiera todos los elementos de la pila A a la pila B, realice el orden inverso de los elementos y devuelva el elemento superior de la pila B.

Código:

class CQueue {

    var stack1: [Int] = []
    var stack2: [Int] = []

    init() {
    }
    
    func appendTail(_ value: Int) {
        stack1.append(value)
    }
    
    func deleteHead() -> Int {
        if stack2.isEmpty {
            while let item = stack1.popLast() {
                stack2.append(item)
            }
        }
        return stack2.popLast() ?? -1
    }
}
复制代码

Enlace LeetCode

Supongo que te gusta

Origin juejin.im/post/7040435281715003406
Recomendado
Clasificación