华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
给定一个队列,但是这个队列比较特殊,可以从头部添加数据,也可以从尾部添加数据,但是只能从头部删除数据。
输入一个数字n,会依次添加数字1~n(也就是添加n次)。
但是在添加数据的过程中,也会删除数据,要求删除必须按照1~n按照顺序进行删除,所以在删除时,可以根据需要调整队列中数字的顺序以满足删除条件。
第一行一个数据N,表示数据的范围。
接下来的2N行是添加和删除语句。
其中:
输出一个数字,表示最小的调整顺序次数。
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);
}
}
4
head add nezha
remove
tail add study
head add java
remove
remove
head add nezha
head add java
1
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。