LeetCode 946. 验证栈序列

题目描述

946. 验证栈序列

image-20230312180033626

思路分析

  • 模拟栈的操作,遍历 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 是 pushedpopped 的长度。每个元素最多被压入和弹出栈一次。
  • 空间复杂度:O (n),用于存储栈。

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2024/15300200
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!