网站使用字体,个人资质网站做推广,南宁网站建设公司seo优化,营销 推广 网站目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《华为OD机试#xff08;JAVA#xff09;真题刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题A卷B卷C卷》。
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
某个打印机根据打印队列执行打印任务。打印任务分为九个优先级分别用数字1-9表示数字越大优先级越高。打印机每次从队列头部取出第一个任务A然后检查队列余下任务中有没有比A优先级更高的任务如果有比A优先级高的任务则将任务A放到队列尾部否则就执行任务A的打印。
请编写一个程序根据输入的打印队列输出实际的打印顺序。
二、输入描述
输入一行为每个任务的优先级优先级之间用逗号隔开优先级取值范围是1~9。
三、输出描述
输出一行为每个任务的打印顺序打印顺序从0开始用逗号隔开。
1、输入
9,3,5
2、输出
0,2,1
3、说明
队列头部任务的优先级为9优先级最高序号为0然后队列头部任务优先级为3队列中还有优先级为5的任务优先级3任务被移到队列尾部然后打印优先级为5的任务故其序号为1最后优先级为3的任务的序号为2。
四、解题思路
每次从队列头部取出第一个任务A然后检查队列余下任务中有没有比A优先级更高的任务如果有比A优先级高的任务则将任务A放到队列尾部否则就执行任务A的打印如果元素相同保证原顺序可以用优先队列实现优先队列存储一个长度为2的数组第一位是优先级第二位是该任务出现的顺序 如果弹出的优先级是最高的任务即和优先队列弹出的优先级相同添加打印顺序如果弹出的优先级不是最高的任务即和优先队列弹出的优先级不相同 将弹出首个优先级再次加入队列queue将弹出首个数组再次加入优先队列prior。
五、Java算法源码
public static void main(String[] args) {Scanner sc new Scanner(System.in);// 每个任务的优先级int[] arr Arrays.stream(sc.nextLine().split(,)).mapToInt(Integer::parseInt).toArray();// 每个任务的优先级依次加入队列QueueInteger queue new ArrayDeque();/*** 每个任务的优先级依次加入优先队列* int[2]:0是每个任务的优先级1是每个任务的优先级对应的下角标* 如果优先级相同则比较下角标按下角标升序排序* 如果优先级不同则按优先级降序排序*/PriorityQueueint[] prior new PriorityQueue((a, b) - (b[0] a[0] ? a[1] - b[1] : b[0] - a[0]));int[] resultArr new int[arr.length];for (int i 0; i arr.length; i) {queue.offer(arr[i]);prior.offer(new int[]{arr[i], i});}// 打印顺序int n 0;while(!queue.isEmpty()) {// 弹出首个优先级int poll queue.poll();// 弹出首个数组int[] pollArr prior.poll();// 如果弹出的优先级是最高的任务即和优先队列弹出的优先级相同if (poll pollArr[0]) {// 添加打印顺序resultArr[pollArr[1]] n;n;} else {// 如果弹出的优先级不是最高的任务即和优先队列弹出的优先级不相同queue.offer(poll);// 将弹出首个优先级再次加入队列queueprior.offer(pollArr);// 将弹出首个数组再次加入优先队列prior}}// 每个任务的打印顺序StringJoiner joiner new StringJoiner(,);for (int i 0; i resultArr.length; i) {joiner.add(resultArr[i]);}System.out.println(joiner);
}六、效果展示
1、输入
9,3,5
2、输出
0,2,1
3、说明
队列头部任务的优先级为9优先级最高序号为0然后队列头部任务优先级为3队列中还有优先级为5的任务优先级3任务被移到队列尾部然后打印优先级为5的任务故其序号为1最后优先级为3的任务的序号为2。 下一篇华为OD机试 - 最长的顺子 - 感谢禁止你发言提供的更简便算法Java 2023 B卷 200分
本文收录于华为OD机试JAVA真题A卷B卷C卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。