欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 华为od机试-缓存需要最少金币数 /静态扫描(java)

华为od机试-缓存需要最少金币数 /静态扫描(java)

2025/9/15 5:15:28 来源:https://blog.csdn.net/lovely_compiler/article/details/146001418  浏览:    关键词:华为od机试-缓存需要最少金币数 /静态扫描(java)

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

1、文件扫描的成本和文件大小相关,如果文件大小为N,则扫描成本为N个金币

2、扫描报告的缓存成本和文件大小无关,每缓存一个报告需要M个金币

3、扫描报告缓存后,后继再碰到该文件则不需要扫描成本,直接获取缓存结果给出源代码文件标识序列和文件大小序列,求解采用合理的缓存策略,最少需要的金币数

输入描述

第一行为缓存一个报告金币数M,L<= M <= 100

第二行为文件标识序列: F1,F2,F3,....,Fn。

第三行为文件大小序列: S1,S2,S3,....,Sn。

备注:

1 <= N <= 10000

1 <= Fi <= 1000

1 <= Si <= 10

输出描述

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

示例1:

5

1 2 2 1 2 3 4

1 1 1 1 1 1 1

输出

7

说明

文件大小相同,扫描成本均为1个金币。缓存任意文件均不合算,因而最少成本为7金币。

示例2:

输入

5

2 2 2 2 2 5 2 2 2

3 3 3 3 3 1 3 3 3

输出

9

 java代码

package odTest;import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class cacheCoin {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int cacheCost = Integer.parseInt(scanner.nextLine());int[] inputFileNos = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int[] FileScanCost = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//key存储文件标识号,int[0]保存扫描价格,int[1]保存同一标识号文件数量Map<Integer,int[]> map = new HashMap<>();for(int i=0;i<inputFileNos.length;i++) {if(map.containsKey(inputFileNos[i])) {int[] info = map.get(inputFileNos[i]);info[1] = info[1]+1;
//				System.out.println(inputFileNos[i]);map.put(inputFileNos[i], info);}else {int[] info = new int[2];info[0] = FileScanCost[i];info[1] = 1;map.put(inputFileNos[i], info);}}//最合适的花费int optimCost = 0;for(Map.Entry<Integer, int[]> entry: map.entrySet()) {int[] info = entry.getValue();//当缓存的花费小于扫描的花费,则不用扫描if( info[0] * info[1] > ( cacheCost + info[0] )) {optimCost = optimCost + cacheCost + info[0];}else {//否则用扫描optimCost = optimCost+ info[0] * info[1];}}System.out.println(optimCost);}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词