赣州市微语网络科技有限公司,北京网站优化方法,做电影网站用什么cms,海西州网站建设公司题目描述#xff1a;
幼儿园里有一个放倒的圆桶#xff0c;它是一个 线性结构#xff0c;允许在桶的右边将篮球放入#xff0c;可以在桶的左边和右边将篮球取出。每个篮球有单独的编号#xff0c;老师可以连续放入一个或多个篮球#xff0c;小朋友可以在桶左边或右边将篮…题目描述
幼儿园里有一个放倒的圆桶它是一个 线性结构允许在桶的右边将篮球放入可以在桶的左边和右边将篮球取出。每个篮球有单独的编号老师可以连续放入一个或多个篮球小朋友可以在桶左边或右边将篮球取出当桶只有一个篮球的情况下必须从左边取出。
如老师按顺序放入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”。
输入描述
每次输入包含一个 测试用例
1.第一行的数字作为老师依次放入的篮球编号
2.第二行的数字作为要检查是否能够按照放入的顺序取出给定的篮球的编号其中篮球的编号用逗号进行分隔.
其中篮球编号用逗号进行分隔。
输出描述
对干每个篮球的取出席列如果确实可以获取请打印出其按照左右方向的操作取出顺序如果无法获取则打印“NO”
备注
1篮球编号篮球个数≤200
篮球上的数字不重复
输出的结果中 LR 必须为大写
示例1
输入
4,5,6,7,0,1,2
6,4,0,1,2,5,7
输出
RLRRRLL
说明
篮球的取出顺序依次为右、左、右、右、右、左、左
示例2
输入
4,5,6,7,0,1,2
6,0,5,1,2,4,7
输出
NO
示例3
输入
1,2,3,4
1,2,3,5
输出
NO
题解
使用双端队列模拟可以完成输出结果
源码 Java
import java.util.*; // 导入Java的工具包包含Scanner等类public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in); String line in.nextLine(); // 读取第一行输入即老师放入的篮球编号String[] numStrings line.split(,); // 分割输入的字符串获取篮球编号数组DequeInteger dq new ArrayDeque(); // 使用双端队列来模拟篮球的放入和取出QueueInteger a new LinkedList(); // 队列a用于存放篮球的初始放入顺序for (String x: numStrings)a.add(Integer.parseInt(x)); // 将字符串转为整数并放入队列aline in.nextLine(); // 读取第二行即要检查的取出顺序numStrings line.split(,);int[] b new int[numStrings.length]; // 数组b用于存放需要检查的取出顺序for (int i 0; i numStrings.length; i)b[i] Integer.parseInt(numStrings[i]); // 转换并存储到数组bStringBuffer res new StringBuffer(); // 用于存储取出篮球的操作序列左或右boolean f true; // 标志变量表示是否可以按要求顺序取出篮球for (int x : b) { // 遍历要检查的取出顺序while (f) {if (dq.size() 0 dq.peekFirst() x) { // 检查队首元素是否匹配dq.pollFirst(); // 如果匹配从队首取出res.append(L); // 记录操作为从左边取出break;} else if (dq.size() 0 dq.peekLast() x) { // 检查队尾元素是否匹配dq.pollLast(); // 如果匹配从队尾取出res.append(R); // 记录操作为从右边取出break;} else if (a.size() 0) {dq.offerLast(a.poll()); // 如果当前队列中没有匹配的继续从a中放入篮球到队尾} else {f false; // 如果无法继续放入且没有找到匹配的篮球设置f为false}}if (!f) // 如果已确定无法按要求取出中断循环break;}System.out.println((f ? res.toString() : NO)); // 根据f的值输出结果或“NO”}
}