解析:这个问题可以用栈来解决。我们用一个栈来模拟中转站 C,用一个变量来表示下一个要驶出的车厢号。 我们遍历站长要求的车厢驶出顺序,如果当前车厢号等于下一个要驶出的车厢号,说明可以直接驶出,将下一个要驶出的车厢号加1。 否则,我们判断中转站 C 是否为空,如果不为空且栈顶元素等于下一个要驶出的车厢号,说明可以从中转站 C 驶出,将栈顶元素弹出,将下一个要驶出的车厢号加1。 否则,将当前车厢号入栈。 最后,如果栈中剩余的元素可以按照顺序驶出,返回"YES";否则,返回"NO"。

代码如下:

def canDriveOut(n, order): stack = [] nextCar = 1 for car in order: if car == nextCar: nextCar += 1 elif stack and stack[-1] == nextCar: stack.pop() nextCar += 1 else: stack.append(car) while stack: if stack.pop() != nextCar: return "NO" nextCar += 1 return "YES"

测试

print(canDriveOut(5, [5, 4, 1, 2, 3])) # YES print(canDriveOut(5, [4, 5, 3, 2, 1])) # N

因此驶入 C 站的车厢必须按照相反的顺序驶出。 Qingyong进一步限定允许的操作如下:让 A 方向最前面的车厢从 B 方向驶出车站;让 A 方向最前面的车厢驶入中转站 C;让中转站 C 中最后驶入的车厢从 B 方向驶出车站。请帮助Qingyong判断能否让车厢按照站长给定的顺序驶出北京北站。输入数据第一行为一个正整数 n代表车厢总数n 100000。 第二行有 n 个正整数代表站长要求的车厢

原文地址: https://www.cveoy.top/t/topic/hP11 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录