华为OD机试【优选核酸检测点】【2022.11 Q4 新题】

图片出自:华为机试真题 Java 实现【优选核酸检测点】【2022.11 Q4 新题】_寻找核酸检测点java_MISAYAONE的博客-CSDN博客

华为OD机试【优选核酸检测点】【2022.11 Q4 新题】_第1张图片

首先这是一道很恶心的题目。题目信息量大,逻辑分支多,还有各种细节上的坑。

本着死磕精神,耗时2h+,总算是撸完了代码(ps:时间不充裕禁入)。

结果发现和答主的代码有出入,并自认为自己的方法更合理一些,贴出代码,欢迎批评交流共同进步。

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] now = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int[] finish = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int n = Integer.parseInt(sc.nextLine());
        int[][] check_points = new int[n][];
        for (int i=0;i>
        Queue> result_set = new PriorityQueue<>((a,b)->{
            int ret = a.get(1) -b.get(1);
            if (ret == 0){
                int ret1 = a.get(2) -b.get(2);
                if (ret1==0){
                    return a.get(0) - b.get(0);
                }
                return ret1;
            }
            return ret;
        });
        int now_hour = now[0];
        int available_time = timeDiff(now,finish);
        if(finish[0]>20){
            available_time = available_time-timeDiff(new int[]{20,0},finish);
        }
        if (now[0]<8){
            available_time = available_time-timeDiff(now,new int[]{8,0});
        }
        for(int i=0;iavailable_time){
                continue;
            }
            result_set.offer(Arrays.asList(id,useTime,10*distance));
        }
        System.out.println(result_set.size());
        result_set.stream().map(l->l.stream().map(String::valueOf).reduce((a,b)->{return a+" "+b;}).get()).forEach(System.out::println);
    }

    /**
     * time2-time1
     * @param time1
     * @param time2
     * @return
     */
    public static int timeDiff(int[] time1,int[] time2){
        return (time2[0]-time1[0])*60 + time2[1] -time1[1];
    }

相关总结:

考查信息处理能力,逻辑分析能力。本题核心在于对多时段用时变化的处理,因此如何处理时间非常重要。常见的方案有:1.统一换成以每天0点为起点的整数分钟时间(“引用答主” 用的此方案);2.针对特定情况封装相应的时间处理函数,本题中要求输出的耗时单位为分钟,但给出的时间是数组([hour,minute]),因此,简单封装了一个函数 timeDiff(int[],int[]),转换格式并输出分钟时间差。

你可能感兴趣的:(华为od,数据结构)