LeetCode 946. 验证栈序列
题目描述
思路分析
模拟栈的操作,遍历 pushed 数组,将元素依次入栈,每次入栈后判断栈顶元素是否等于 popped 数组的当前元素,
如果相等则将栈顶元素出栈,popped 数组的指针后移一位,继续判断下一个元素是否相等,直到不相等或者栈为空为止。
如果最后栈为空,则说明 pushed 和 popped 数组是合法的栈序列,否则不合法。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
func validateStackSequences(pushed []int, popped []int) bool {
var stack []int
j := 0
for _, cur := range pushed {
stack = append(stack, cur)
for len(stack) > 0 && stack[len(stack)-1] == popped[j] {
stack = stack[:len(stack)-1]
j++
}
}
return len(stack) == 0
}
- 时间复杂度:O (n),其中 n 是
pushed
和popped
的长度。每个元素最多被压入和弹出栈一次。- 空间复杂度:O (n),用于存储栈。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用