package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param pushV int整型一维数组
* @param popV int整型一维数组
* @return bool布尔型
*/
//时间复杂度:O(N)、空间复杂度:O(N)
func IsPopOrder(pushed []int, popped []int) bool {
//定义一个辅助栈,用于模拟栈的压入和弹出操作。
stack := []int{}
index := 0
//遍历第一个序列中的每一个元素,依次将其压入辅助栈中
for i := 0; i < len(pushed); i++ {
stack = append(stack, pushed[i])
//防止数组越界
if index >= len(popped) {
break
}
//每入栈一个元素,就判断辅助栈的栈顶元素是否等于第二个序列当前位置的元素
//如果是,就将辅助栈的栈顶元素弹出,并将第二个序列的指针后移一位。
for len(stack) > 0 && stack[len(stack)-1] == popped[index] {
stack = stack[:len(stack)-1]
index++
}
}
//遍历完第一个序列后,如果辅助栈为空,则说明第二个序列可以是该栈的弹出序列,否则说明不是
return len(stack) == 0
}