题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
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 }