3.病人看病

梦想是能睡八小时的猪 / 2023-08-02 / 原文

病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

  1. 老年人(年龄 >= 60岁)比非老年人优先看病。
  2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
  3. 非老年人按登记的先后顺序看病。

输入样例

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;
    }