时间限制:1.000S 空间限制:32MB
题目描述
已知自然数1,2,…,N(1<=N<=100)依次入栈,请问序列C1,C2,…,CN是否为合法的出栈序列。
输入描述
输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。
输出描述
对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
输入示例
5
3 4 2 1 5
5
3 5 1 4 2
0
输出示例
Yes
No
答案
package main
import (
"bufio"
"os"
"fmt"
"strings"
"strconv"
)
var (
n int
arr []int
stack []int
idx int
)
func main() {
input := bufio.NewScanner(os.Stdin)
for input.Scan() {
n, _ := strconv.Atoi(input.Text())
if n == 0 {
break
}
input.Scan()
arr = make([]int, n)
for i, str := range strings.Fields(input.Text())[:n] {
num, _ := strconv.Atoi(str)
arr[i] = num
}
stack = make([]int, 0, n)
idx = 0
for i := range arr {
stack = append(stack, i + 1)
for len(stack) > 0 && stack[len(stack) - 1] == arr[idx] {
stack = stack[:len(stack) - 1]
idx++
}
}
if len(stack) == 0 && idx == n {
fmt.Println("Yes")
} else {
fmt.Println("No")
}
}
}