Go 语言栈序列验证:判断推入和弹出序列是否有效
通过使用 OpenAI Chat 模型的 gpt-3.5-turbo 版本,我们可以编写以下 Go 语言代码来解决这个问题:
func validateStackSequences(pushed []int, popped []int) bool {
stack := make([]int, 0)
j := 0
for _, num := range pushed {
stack = append(stack, num)
for len(stack) > 0 && stack[len(stack)-1] == popped[j] {
stack = stack[:len(stack)-1]
j++
}
}
return j == len(popped)
}
func main() {
pushed := []int{1, 2, 3, 4, 5}
popped := []int{4, 5, 3, 2, 1}
result := validateStackSequences(pushed, popped)
fmt.Println(result)
}
这段代码定义了一个 validateStackSequences 函数,它接受 pushed 和 popped 两个数组作为输入,并返回一个布尔值来表示是否可能是在最初空栈上进行的推入和弹出操作序列的结果。
函数使用一个辅助栈来模拟操作序列。它遍历 pushed 数组,将元素依次推入栈中。然后,它检查当前栈顶元素是否等于 popped 数组中的 j 索引处的元素,如果相等,则弹出栈顶元素并增加 j 的值。最后,它返回 j 是否等于 popped 数组的长度,以判断操作序列是否有效。
在 main 函数中,我们使用给定的输入调用 validateStackSequences 函数,并打印结果。
对于输入 pushed = [1, 2, 3, 4, 5] 和 popped = [4, 5, 3, 2, 1],该程序将输出 true,表示这是可能的操作序列。
原文地址: https://www.cveoy.top/t/topic/Uno 著作权归作者所有。请勿转载和采集!