[Deslizar el banco de preguntas] Sword se refiere a las preguntas de programación de Offer_, la secuencia de empujar y hacer estallar la pila.

Descripción del Título

Ingrese dos secuencias enteras. La primera secuencia indica el orden en el que se empuja la pila. Por favor, juzgue si la segunda secuencia puede ser el orden emergente de la pila. Suponga que todos los números colocados en la pila no son iguales. Por ejemplo, la secuencia 1, 2, 3, 4, 5 es el orden de inserción de una determinada pila, la secuencia 4, 5, 3, 2, 1 es una secuencia emergente correspondiente a la secuencia de inserción, pero 4, 3, 5 , 1,2 No puede ser la secuencia pop de la secuencia push. (Nota: las longitudes de estas dos secuencias son iguales)

Límite de tiempo: 1 segundo Límite de espacio: 32768K Índice de calor: 408830

Puntos de conocimiento de esta pregunta:  pila

 

premisa:

         Comprender la pila: comprender la pila y el empaquetado y las aplicaciones de la pila

 

análisis:

1. Cree una nueva matriz newStack como pila.

2. Coloque los elementos de pushV en la nueva pila uno por uno.

3. Si el elemento superior de la nueva pila es el mismo que el primer elemento de popV, estos dos elementos se extraen de la pila.

4. Cuando todos los elementos popV se extraen de la pila, significa que es la secuencia emergente de la secuencia de inserción.

Resolución de problemas:

function IsPopOrder(pushV, popV)
{
    //创建一个新的数组作为栈
    var newStack = [];
    while(pushV.length != 0){
        //将pushV中的元素一个一个往新栈放入
        newStack.push(pushV.shift());
        //如果新栈的栈顶元素与popV中的第一个元素相同,则这两个元素出栈。
        while(newStack.length != 0 && newStack[newStack.length - 1] == popV[0]){
            popV.shift();
            newStack.pop();
        }
    }
    //最后的popV元素全部出栈就符合
    return popV.length == 0;
}

ejemplo:

[1,2,3,4,5], [4,3,5,1,2]

Use el diagrama del caso

Supongo que te gusta

Origin blog.csdn.net/weixin_42339197/article/details/100539191
Recomendado
Clasificación