华为OD统一考试 - 篮球游戏
题目描述
幼儿园里有一个放倒的圆桶,它是一个线性结构,允许在桶的右边将篮球放入,可以在桶的左边和右边将篮球取出。
每个篮球有单独的编号,老师可以连续放入一个或多个篮球,小朋友可以在桶左边或右边将篮球取出,当桶只有一个篮球的情况下,必须从左边取出。
如老师按顺序放入1、2、3、4、5 共有 5 个编号的篮球,那么小朋友可以依次取出编号为1、2、3、4、5 或者 3、1、2、4、5 编号的篮球,无法取出 5、1、3、2、4 编号的篮球。
其中 3、1、2、4、5 的取出场景为:
- 连续放入1、2、3号
- 从右边取出3号
- 从左边取出1号
- 从左边取出2号
- 放入4号
- 从左边取出4号
- 放入5号
- 从左边取出5号
简答起见,我们以 L 表示左,R表示右,此时取出篮球的依次取出序列为“RLLLL”。
输入描述
每次输入包含一个测试用例:
- 第一行的数字作为老师依次放入的篮球编号
- 第二行的数字作为要检查是否能够按照放入的顺序取出给定的篮球的编号,其中篮球的编号用逗号进行分隔。
其中篮球编号用逗号进行分隔。
输出描述
对于每个篮球的取出序列,如果确实可以获取,请打印出其按照左右方向的操作取出顺序,如果无法获取则打印“NO”。
备注
- 1 ≤ 篮球编号,篮球个数 ≤ 200
- 篮球上的数字不重复
- 输出的结果中 LR 必须为大写
用例
输入 |
4,5,6,7,0,1,2 6,4,0,1,2,5,7 |
输出 |
RLRRRLL |
说明 |
篮球的取出顺序依次为“右、左、右、右、右、左、左” |
输入 |
4,5,6,7,0,1,2 6,0,5,1,2,4,7 |
输出 |
NO |
说明 |
无法取出对应序列的篮球 |
输入 |
1,2,3,4 1,2,3,5 |
输出 |
NO |
说明 |
不存在编号为5的篮球,所以无法取出对应编号的数据 |
题目解析
本题可以使用双端队列dque来模拟圆桶。
假设
第一行给定放入顺序是inputs
第二行给定取出顺序是outputs
由于需要按照outputs顺序取出,因此我们定义一个index指向当前outputs要被取出的元素,
初始时index = 0
按照inputs顺序依次放入(篮球编号)到dque(圆桶)右边(addLast操作),每当放入一个后,则需要进行多次取出检查,即一次放入后,可以进行多次取出行为:
假设
圆桶左边篮球编号是left,则 left = dque.getFirst
圆桶右边篮球编号是r
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。