3.病人看病
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
- 老年人(年龄 >= 60岁)比非老年人优先看病。
- 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
- 非老年人按登记的先后顺序看病。
输入样例
5
021075 40
004003 15
010158 67
021033 75
102012 30
输出样例
021033
010158
021075
004003
102012
【思路】
用一个map将60+的保存,然后用list对map的value排序(稳定),然后按顺序将60-的添加进去即可。
【代码】
public static String[] coupons(String[] id,int[] age) { Map<String,Integer> above60 = new LinkedHashMap<>(); for(int i =0;i<age.length;i++){ if(age[i]>=60){ above60.put(id[i],age[i]); } } List<Map.Entry<String ,Integer>>list = new ArrayList<>(above60.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }); String[] res = new String[id.length]; int index = 0; for(Map.Entry<String,Integer> m:list){ res[index++] = m.getKey(); } for(int i=0;i<id.length;i++){ if(age[i]<60){ res[index++] = id[i]; } } return res; }