目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、Java算法源码
- 五、效果展示
- 1、输入
- 2、输出
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
给定一个队列,但是这个队列比较特殊,可以从头部添加数据,也可以从尾部添加数据,但是只能从头部删除数据。
输入一个数字n,会依次添加数字1~n(也就是添加n次)。
但是在添加数据的过程中,也会删除数据,要求删除必须按照1~n按照顺序进行删除,所以在删除时,可以根据需要调整队列中数字的顺序以满足删除条件。
二、输入描述
第一行一个数据N,表示数据的范围。
接下来的2N行是添加和删除语句。
其中:
- head add x 表示从头部添加元素 x;
- tail add 表示从尾部添加元素;
- remove表示删除元素。
三、输出描述
输出一个数字,表示最小的调整顺序次数。
四、Java算法源码
package com.guor.od;import java.util.*;public class OdTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 数据的范围int n = Integer.parseInt(sc.nextLine());// 接下来的2N行是添加和删除语句String[] arr = new String[n * 2];for (int i = 0; i < arr.length; ++i) {arr[i] = sc.nextLine();}/*** 1. head add x 表示从头部添加元素 x;* 2. tail add 表示从尾部添加元素;* 3. remove表示删除元素。*/int count = 0;int input = 0;int output = 0;LinkedList<Integer> linkedList = new LinkedList<>();for (String command : arr) {String com = command.split(" ")[0];switch (com) {case "head":// 表示从头部添加元素 x;linkedList.addFirst(++input);break;case "tail":// 表示从尾部添加元素;linkedList.addLast(++input);break;default:// 表示删除元素。if (!linkedList.getFirst().equals(++output)) {count++;linkedList.sort(Integer::compareTo);}linkedList.removeFirst();break;}}System.out.print(count);}
}
五、效果展示
1、输入
4
head add nezha
remove
tail add study
head add java
remove
remove
head add nezha
head add java
2、输出
1
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。