华为OD机试真题 Java 实现【静态代码扫描服务】【2023Q1 100分】-LMLPHP

一、题目描述

静态扫描快速识别源代码的缺陷,静态扫描的结果以扫描报告作为输出:

  1. 文件扫描的成本和文件大小相关,如果文件大小为N,则扫描成本为N个金币;
  2. 扫描报告的缓存成本和文件大小无关,每缓存一个报告需要M个金币;
  3. 扫描报告缓存后,后继再碰到该文件则不需要扫描成本,直接获取缓存结果

给出源代码文件标识序列和文件大小序列,求解采用合理的缓存策略,最少需要的金币数。

二、输入描述

第一行为缓存一个报告金币数M,1<=M<=100
第二行为文件标识序列: F1,F2,F3…Fn,其中 1<=N<=10000, 1<=Fi<=1000
第三行为文件大小序列: s1,s2,s3…sn,其中 1<=N<=10000, 1<=Si<=10

三、输出描述

采用合理的缓存策略,需要的最少金币数。

四、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String line = sc.nextLine();
    int a = Integer.parseInt(line);

    String line1 = sc.nextLine();
    String line2 = sc.nextLine();
    String[] arr1 = line1.split(" ");
    String[] arr2 = line2.split(" ");

    Map<Integer, int[]> map = new HashMap<>();
    for (int i = 0; i < arr1.length; i++) {
        int key = Integer.parseInt(arr1[i]);
        int coin = Integer.parseInt(arr2[i]);

        int[] arr = map.getOrDefault(key, new int[]{0, 0});
        arr[0] = coin;
        arr[1]++;
        map.put(key, arr);
    }

    int sum = 0;
    for (int key : map.keySet()) {
        int[] arr = map.get(key);
        int coin = arr[0];
        int temp1 = coin * arr[1];
        int temp2 = coin + a;
        int val = Math.min(temp1, temp2);
        sum += val;
    }
    System.out.println(sum);
}

五、效果展示

1、输入

5
1 2 2 1 2 3 4
1 1 1 1 1 1 1

2、输出

7

华为OD机试真题 Java 实现【静态代码扫描服务】【2023Q1 100分】-LMLPHP


🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

华为OD机试真题 Java 实现【静态代码扫描服务】【2023Q1 100分】-LMLPHP

05-13 12:04