按优先级打印问题的实现(Java)
2017-07-18 13:56
288 查看
问题描述:
有一个打印任务队列,其优先级是不相同的(1-9之间)。若队头元素优先级不是最大的,则将队头元素出队,并加入队尾。若队头元素优先级是最大的,则直接打印该任务的id。请设计算法,实现以上过程。
e.g. 输入 任务优先级(任务id)8(0)9(1)7(2) 则打印1,0,2
分析该问题发现,本问题不能简单的用排序算法实现。
e.g. 输入 3(0)4(1)3(2)时,应该打印1,2,0而不是1,0,2
我的实现是:
有一个打印任务队列,其优先级是不相同的(1-9之间)。若队头元素优先级不是最大的,则将队头元素出队,并加入队尾。若队头元素优先级是最大的,则直接打印该任务的id。请设计算法,实现以上过程。
e.g. 输入 任务优先级(任务id)8(0)9(1)7(2) 则打印1,0,2
分析该问题发现,本问题不能简单的用排序算法实现。
e.g. 输入 3(0)4(1)3(2)时,应该打印1,2,0而不是1,0,2
我的实现是:
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); String string=in.nextLine(); String[] result=string.split(","); LinkedList<Integer> a=new LinkedList<Integer>(); LinkedList<Integer> b=new LinkedList<Integer>(); for(int i=0;i<result.length;i++){ b.add(i); a.add(Integer.valueOf(result[i].trim())); } System.out.println("原数组:"+a); System.out.println("原下标:"+b); sort(a, b); System.out.println("新数组:"+a); System.out.println("新下标:"+b); } public static void sort(LinkedList<Integer> a,LinkedList<Integer> b){ for(int i=0;i<a.size();i++){ for(int j=i+1;j<a.size();j++){ if (a.get(i)<a.get(j)) { a.add(a.remove(i)); b.add(b.remove(i)); i-=1; break; } } } } }采用两个LinkedList结构来实现上述问题,一个用于存放任务优先级,一个存放任务id。任务优先级与id一一对应,所以在调整时,优先级如何调整,那么id就进行同样的调整。运行结果如下:
相关文章推荐
- 《剑指offer》问题6 从尾到头打印链表 Java实现
- JAVA实现顺时针打印矩阵问题(《剑指offer》)
- Java实现两个线程交替打印问题
- Java线程问题实现打印数字字母
- 递归思想实现大数问题(打印1到n位最大整数)(JAVA代码)
- 数据结构与算法分析笔记与总结(java实现)--链表1:从尾到头打印链表值问题
- AIX 程序设计大赛-AIX正方形问题算法及Java程序实现(方案三)
- 利用java实现打印菱形
- 八皇后问题 java实现,算法两则
- 打印一首唐诗的N种实现之一:问题的提出
- 【原创】蚂蚁爬杆问题之java实现
- 具体java打印方法的实现
- java代码中实现字符编码转换(解决中文乱码问题)
- 关于java打印功能的最简单实现的学习笔记
- Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
- 百钱买百鸡问题--java 实现
- 用JAVA 实现“生产者-消费者”问题
- AIX 程序设计大赛-AIX正方形问题算法及Java程序实现(方案二)
- java中实现高精度打印(CSDN限制还真多了,事多...)
- 用java实现打印功能