华为OD机试 - 静态扫描(Java 2024 E卷 100分)

news2024/9/29 15:21:17

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

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

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

二、输入描述

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

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

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

备注:

1 <= N <= 10000
1 <= Fi <= 1000
1 <= Si <= 10

三、输出描述

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

四、测试用例

测试用例1:

1、输入

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

2、输出

6

3、说明

文件1和文件2各出现2次,文件3和文件4各出现1次。

判断是否缓存:

文件1:M=5 vs (2-1)1=1 → 不缓存,成本 21=2
文件2:M=5 vs (2-1)1=1 → 不缓存,成本 21=2
文件3:出现1次,不缓存,成本 11=1
文件4:出现1次,不缓存,成本 1
1=1

总成本:2 + 2 + 1 + 1 = 6

测试用例2:

1、输入

5
2 2 2 2 2
3 3 3 3 3

2、输出

8

3、说明

文件2出现5次,大小为3。
判断是否缓存:
文件2:M=5 vs (5-1)*3=12 → 缓存,成本 3 + 5=8
总成本:8

五、解题思路

  1. 统计文件出现次数和大小
    • 使用两个哈希表(或字典)
    • fileFrequencyMap:记录每个文件ID出现的次数,fileSizeMap:记录每个文件ID对应的文件大小。
  2. 计算总成本
    • 遍历每个唯一的文件ID,对于每个文件,比较两种策略的成本:
      • 不缓存:每次扫描都需要支付文件大小的成本,总成本为 frequency * size。
      • 缓存:第一次扫描支付文件大小的成本和缓存成本 M,后续不需要再次支付扫描成本,总成本为 size + M。
    • 选择两种策略中成本较低的一种,累加到总成本中。
  3. 输出结果:
    • 输出计算得到的最小总金币成本。

对于每个文件,若 frequency * size 小于或等于 size + M,则不缓存,支付总扫描成本;否则,选择缓存,支付 size + M。

六、Java算法源码

public class OdTest02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 从控制台读取缓存大小m
        int M = Integer.parseInt(scanner.nextLine());

        // 读取文件ID数组
        Integer[] fileIds = Arrays.stream(scanner.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);

        // 读取文件大小数组
        Integer[] fileSizes = Arrays.stream(scanner.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);

        // 输出计算结果
        System.out.println(calculateTotalCost(M, fileIds, fileSizes));
    }

    /**
     * 计算总扫描成本
     * @param cacheSize 缓存大小
     * @param fileIds 文件ID数组
     * @param fileSizes 文件大小数组
     * @return 总扫描成本
     */
    public static int calculateTotalCost(int cacheSize, Integer[] fileIds, Integer[] fileSizes) {
        // fileFrequencyMap 用于保存每个文件ID的出现次数
        HashMap<Integer, Integer> fileFrequencyMap = new HashMap<>();

        // fileSizeMap 用于保存每个文件的大小
        HashMap<Integer, Integer> fileSizeMap = new HashMap<>();

        // 遍历文件ID,记录每个文件的出现次数和大小
        for (int i = 0; i < fileIds.length; i++) {
            Integer fileId = fileIds[i];
            fileFrequencyMap.put(fileId, fileFrequencyMap.getOrDefault(fileId, 0) + 1);
            fileSizeMap.putIfAbsent(fileId, fileSizes[i]);
        }

        int totalCost = 0;
        // 遍历每个文件ID,计算每个文件的最小扫描成本
        for (Integer fileId : fileFrequencyMap.keySet()) {
            int frequency = fileFrequencyMap.get(fileId);
            int size = fileSizeMap.get(fileId);

            // 选择重复扫描文件或使用缓存的最小成本
            totalCost += Math.min(frequency * size, size + cacheSize);
        }

        return totalCost;
    }
}

七、效果展示

1、输入

10
1 1 1 1 1 1 1
2 2 2 2 2 2 2

2、输出

12

3、说明

文件1出现7次,大小为2。

判断是否缓存:

M=10 vs (7-1)*2=12 → 缓存,成本 2 + 10=12

总成本:12

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八LAMP搭建

# LAMP ## 一、知识回顾 ### FTP samba nfs 特点 - 借用Linux用户作为映射用户&#xff0c;进行权限管理 - 软件本身还有管理控制权限 #### 客户端连接到服务器后进行读写执行等操作 &#xff0c;必须同时具有: - 软件许可的权限 vsftpd: anon upload enableYES - 文件…

PC端微信小程序如何调试?

向往常一样运行开微信小程序开发者工具 如果只弹出pc端小程序&#xff0c;没有出现调试的界面&#xff1a;点击胶囊按钮的三个…选择重新进入小程序 即可依次展开相应的功能调试&#xff0c;改完代码没反应再刷新看看&#xff0c;再没反应就再次重新点击编译并自动调试。

fish-speech语音大模型本地部署

文章目录 fish-speech模型下载编译部署 小结 fish-speech模型 先说下fish-speech模型吧&#xff0c;可以先看下官网。如下&#xff1a; 这就是一个模型&#xff0c;可以根据一个样例声音&#xff0c;构建出自己需要的声音。其实&#xff0c;这个还是有很多用途的&#xff1b;…

Tpflow:提升开发效率的PHP工作流引擎

Tpflow&#xff1a;提升开发效率的PHP工作流引擎 今天要跟大家介绍的是一款能够显著提升开发效率的工具——Tpflow&#xff01;它是一个专门为PHP开发者设计的工作流引擎&#xff0c;致力于帮助你减少80%以上的代码量&#xff0c;轻松管理复杂的业务流程。让我们一起来看看它的…

win10安装Java闪退

问题&#xff1a;win10 在安装Java8时&#xff0c;电脑没有反应&#xff0c;出现闪退的现象。 1、打开设置找到“时间和语言” 2、找到“中文&#xff08;简体&#xff0c;中国&#xff09;” 3、点击“选项” 4、删除“百度输入法” 5、问题解决&#xff0c;再次安装Java

史上最细快速排序讲解(hoare,挖坑,双指针, 非递归)

文章目录 前言一、递归方法快排1. 递归主要思想2. 递归代码实现 二、hoare方法实现找基准值1. hoare思想2. hoare代码实现 三、挖坑方法实现找基准值1. 挖坑思想2. 挖坑代码实现 四、双指针方法实现找基准值1. lomuto前后指针法思想2. lomuto前后指针法代码实现 五、非递归方法…

第十四周:机器学习笔记

第十四周周报 摘要Abstract一、机器学习——Transformer&#xff08;下&#xff09;1. Transformer decoder1.1 autoregressive decoder&#xff08;自回归解码器&#xff09;1.2 Transformer decoder结构图1.3 non-autoregressive decoder&#xff08;非自回归解码器&#xff…

24年最新 idea 插件开发教程,面试鸭插件技术实现!

大家好&#xff0c;我是松柏。今天给大家分享下这个JetBrains插件开发教程。 学习过程中可以参考开源项目&#xff1a;https://github.com/yuyuanweb/mianshiya-plugin 首先贴一下官方文档&#xff1a;https://plugins.jetbrains.com/docs/intellij/welcome.html 虽然这个文档…

【最新发布】Win10 22H2 19045.4957 正式版免费下载!

今日系统之家小编给大家分享2024年9月第二次更新的Windows10 22H2正式版系统&#xff0c;该版本系统基于最新Windows10 22H2 19045.4957 64位专业版进行离线制作&#xff0c;安全无毒&#xff0c;修复了使用某些环绕声技术时某些媒体的播放可能会停止等多项问题&#xff0c;系统…

基于C#开发的(CS界面)图书管理系统

图书管理系统项目开发说明书 项目简介 项目背景&#xff08;选择这个项目的原因、前景&#xff0c;面向的用户&#xff0c;优势&#xff09;&#xff1b; 根据温州理工学院需要希望能够充分利用现代科技来提高图书管理的效率&#xff0c;在原有的办公系统基础上进行扩展&…

1. 如何在服务器上租GPU跑实验 (以AutoDL为例) - 深度学习·科研实践·从0到1

目录 前言 1. 在AutoDL上注册账号 2. 在算力市场选择GPU 3. 创建实例 4. 控制台-容器实例界面&#xff08;核心&#xff09; 4.1 无卡模式&#xff08;常用&#xff09; 5. 帮助文档 前言 好记性不如烂笔头&#xff0c;本专栏将详细记录下本人学习深度学习工程实践&…

Python通过Sqlalchemy框架实现增删改查

目录 简介 什么是SQLAlchemy&#xff1f; SQLAlchemy可以分为两个部分&#xff1a;Core和ORM。 一、首先安装sqlalchemy 二、在配置文件中添加数据库连接信息&#xff0c;我这里是Mysql 三、 创建数据库连接类&#xff0c;我这里是动态读取数据库的表字段&#xff0c;自动…

神器!GPT让大学生也能轻松实现架构师级的系统设计图

文章目录 零、前言一、实现架构师级的系统设计图操作指导系统背景功能细化 画用例图画系统架构设计图划分html页面画实体类图画服务层类图画时序图画数据库ER图 二、感受 零、前言 粉丝做毕业设计时&#xff0c;不会画架构图&#xff0c;问虚竹哥会不会画&#xff5e; 虽然这…

基于微信小程序的空巢老人健康管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

STM32引脚PB3、PB4、PA15作为输入输出的特殊配置

一、问题描述 简单描述&#xff1a; 最近做的一个项目中&#xff0c;PB3端口配置为输入&#xff0c;不管外部输入是高电平还是低电平&#xff0c;一直读取到的是低电平。 调试过程&#xff1a;在撰写代码过程中&#xff0c;又发现新的问题&#xff0c;Enter按键无法控制屏幕数…

电脑显示缺失msvcp140_1.dll怎样修复,5种快速修复方法让你快速修复

1. msvcp140_1.dll 定义 1.1 Microsoft Visual C 2015 Redistributable组件 msvcp140_1.dll 是 Microsoft Visual C 2015 Redistributable 的关键组件之一&#xff0c;扮演着至关重要的角色。以下是对 msvcp140_1.dll 的详细分析&#xff1a; 组件功能&#xff1a;msvcp140_…

《中国电子报》报道: 安宝特AR为产线作业者的“秘密武器

近日&#xff0c;中国电子报在其文章《下一代工业智能终端重新定义制造业》中对安宝特的增强现实&#xff08;AR&#xff09;解决方案给予了高度评价&#xff0c;称其为产线作业者的“秘密武器”。这一创新技术改变了传统制造业的作业方式&#xff0c;使得操作人员能够在生产过…

Ubuntu中交叉编译armadillo库

网上关于交叉编译armadillo库比较少&#xff0c;借鉴了一些但是在前几天编译时总是磕磕绊绊&#xff0c;于是写一个详细的编译过程。 交叉编译armadillo库包含两个步骤&#xff1a;交叉编译依赖库和交叉编译armadillo。armadillo官网介绍依赖库如下图所示&#xff1a; 需要注意…

【高性能内存池】page cache 5

page cache 1 page cache的框架2 central cache从page cache申请n页span的过程3 page cache 的结构3.1 page cache类框架3.2 central cache向page cache申请span3.3 获取k页的span page cache的结构和central cache是一样的&#xff0c;都是哈希桶的结构&#xff0c;并且挂载的…