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

news2024/11/20 22:39:59

在这里插入图片描述

一、题目描述

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

  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

三、输出描述

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

四、解题思路

  1. 首先读取输入的缓存一个报告金币数 M;
  2. 使用 nextLine() 方法分别读取文件标识序列和文件大小序列,并将它们分别存储在字符串数组 arr1 和 arr2 中;
  3. 创建一个 Map<Integer, int[]> 来存储文件标识和对应的文件大小和出现次数;
  4. 使用循环遍历文件标识序列,对每个文件标识进行以下操作:
    • 将文件标识和文件大小分别转换为整数类型;
    • 从 map 中获取当前文件标识的记录,如果不存在则创建一个新记录;
    • 将文件大小累加到记录中的文件大小上,并将出现次数加一;
    • 将更新后的记录存回 map 中;
  5. 初始化变量 sum 为 0,用于存储最少需要的金币数;
  6. 使用循环遍历 map中的每个记录,对每个记录进行以下操作:
    • 获取文件大小和出现次数;
    • 计算如果不使用缓存的情况下所需金币数(文件大小乘以出现次数);
    • 计算如果使用缓存的情况下所需金币数(文件大小加上缓存金币数);
    • 取两者中的较小值,并累加到 sum 中;
  7. 输出 sum,即为采用合理的缓存策略所需的最少金币数;

五、JavaScript算法源码

function minimumCoins(M, input1, input2) {
    const fileIdentifiers = input1.split(" ")
    const fileSizes = input2.split(" ")
    const map = new Map();
    for (let i = 0; i < fileIdentifiers.length; i++) {
        const key = parseInt(fileIdentifiers[i]);
        const coin = parseInt(fileSizes[i]);

        if (map.has(key)) {
            const arr = map.get(key);
            arr[0] += coin;
            arr[1]++;
        } else {
            map.set(key, [coin, 1]);
        }
    }

    let sum = 0;
    for (const [key, [coin, count]] of map.entries()) {
        const temp1 = coin * count;
        const temp2 = coin + M;
        const val = Math.min(temp1, temp2);
        sum += val;
    }

    return sum;
}

六、效果展示

1、输入

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

2、输出

7

在这里插入图片描述


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

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

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

(二)安装 Kafka

文章目录 1.选择操作系统2.配置 Java 环境3.安装 ZooKeeper4.安装 broker&#xff08;1&#xff09;安装 broker&#xff08;2&#xff09;验证是否安装正确 5.配置 broker&#xff08;1&#xff09;常规配置&#xff08;2&#xff09;主题的默认配置 6.配置 Kafka 集群&#x…

Netty之协议设计

目录 为什么需要协议 redis协议示例 http协议举例 自定义协议 要素 编解码器 测试 为什么需要协议 TCP/IP 中消息传输基于流的方式&#xff0c;没有边界。 协议的目的就是划定消息的边界&#xff0c;制定通信双方要共同遵守的通信规则 例如&#xff1a;在网络上传输 …

c++11 标准模板(STL)(std::ios_base)(三)

定义于头文件 <ios> class ios_base; 类 ios_base 是作为所有 I/O 流类的基类工作的多用途类。它维护数种数据&#xff1a; 1) 状态信息&#xff1a;流状态标志&#xff1b; 2) 控制信息&#xff1a;控制输入和输出序列格式化和感染的本地环境的标志&#xff1b; 3)…

(一)Flask简介和快速使用

关于Python三大Web框架浅谈一嘴&#xff1a; Django、Flask和Tornado三个框架都是Python Web应用的开发框架&#xff0c;虽然它们都能够开发Web应用&#xff0c;但在使用方式、适用领域和处理方式上还是有很多不同的。 Django Django是一个高层次&#xff08;大而全&#xff0…

Flutter自定义系列之折线波动图,心率图,价格走势图

随着前两篇文章的学习&#xff0c;我今天继续给大家演示下简单的自定义之折线波动图&#xff0c;心率图&#xff0c;价格走势图。 这里&#xff0c;我们创建一个自定义的StatefulWidget&#xff0c;用于显示动态的价格线。 我们将使用CustomPaint和CustomPainter来绘制价格线…

chatgpt赋能python:Python中如何截断字符串

Python中如何截断字符串 Python是一种简单易学、高效的编程语言&#xff0c;旨在让开发人员更快、更方便地完成任务。然而&#xff0c;在实际开发过程中&#xff0c;我们常常需要对字符串进行截断操作。那么&#xff0c;Python中怎么截断字符串呢&#xff1f;接下来就让我们来…

如何最大限度地利用ChatGPT、Bard和其他聊天机器人

作者&#xff1a;Hayden Field 译者&#xff1a;明明如月 当下&#xff0c;随着生成式人工智能的发展&#xff0c;面向消费者的聊天机器人能够处理不同领域的需求&#xff0c;并提供相应的帮助和建议&#xff0c;如制定商业战略、设计数学学习指南、提供薪资谈判建议&#xff…

chatgpt赋能python:Python字符串截断-解决方式及实现方法

Python字符串截断-解决方式及实现方法 在Python编程中&#xff0c;处理字符串是一个非常常见的任务。其中&#xff0c;字符串截断也是在许多场景下必不可少的功能之一。Python不仅提供了许多内置函数来处理字符串&#xff0c;而且还有许多方法来截断字符串。 什么是字符串截断…

chatgpt赋能python:Python怎么截图速度快?

Python怎么截图速度快&#xff1f; 在现在这个数字时代&#xff0c;我们所有人都需要进行屏幕截图。无论是用于记录重要笔记&#xff0c;制作教程&#xff0c;或是用于软件质量控制&#xff0c;高速、高质量、高效的屏幕截图工具都非常必要。 在Python编程领域中&#xff0c;…

S3C2440A的ARM工作模式以及寄存器种类

文章目录 前言一、ARM的工作模式二、寄存器的种类&#xff08;注意特殊寄存器的使用&#xff09;总结 前言 本期和大家主要分享的是ARM工作模式以及寄存器种类&#xff0c;不同系列的ARM的工作模式以及寄存器的种类大同小异&#xff0c;所以针对于S3C2440A&#xff0c;一定得通…

【题目解析】第六届字节后端青训营结营小测试全解析

前言 &#x1f44f; Hi! 我是 Yumuing&#xff0c;一个技术的敲钟人 &#x1f468;‍&#x1f4bb; 每天分享技术文章&#xff0c;永远做技术的朝拜者 &#x1f4da; 欢迎关注我的博客&#xff1a;Yumuing’s blog 由于官方答案没有出来&#xff0c;所以&#xff0c;这部分都是…

03.填充中断向量表IDT,使用中断

填充中断描述符表IDT&#xff0c;使用中断 通过初始化中断控制芯片&#xff0c;编码中断函数&#xff0c;实现BIOS中断 操作系统的中断是一种异步事件&#xff0c;用于通知 CPU 某个事件已经发生&#xff0c;例如硬件设备完成数据传输、发生错误或用户发起的系统调用。当操作系…

栈和队列(栈的应用)[二]

文章目录 栈的应用一、栈在系统中的应用简化路径(leetcode. 71) 二、扩号匹配问题有效的括号(leetcode. 20) 三、字符串去重删除字符串中的所有相邻重复项(leetcode. 1047) 四、逆波兰表达式问题逆波兰表达式求值(leetcode. 150) 总结 栈的应用 递归的实现是栈&#xff1a;每一…

使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案-1

目录 前言: 一.目录结构 二.注册表研究 1.HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Tencent\MobileGamePC 2.HKEY_CURRENT_USER\Software\Tencent\MobileGamePC 三.模拟器快捷启动 1.快捷启动命令: 2.启动命令如何放入桌面: 3.adb端口,目前测试均可以使用: 前言: 此…

PyTorch深度学习实战(3)——使用PyTorch构建神经网络

PyTorch深度学习实战&#xff08;3&#xff09;——使用PyTorch构建神经网络 0. 前言1. PyTorch 构建神经网络初体验1.1 使用 PyTorch 构建神经网络1.2 神经网络数据加载1.3 模型测试1.4 获取中间层的值 2. 使用 Sequential 类构建神经网络3. PyTorch 模型的保存和加载3.1 模型…

【框架源码】Spring源码解析之Bean生命周期流程

观看本文前&#xff0c;我们先思考一个问题&#xff0c;什么是Spring的bean的生命周期&#xff1f;这也是我们在面试的时候&#xff0c;面试官常问的一个问题。 在没有Spring之前&#xff0c;我们创建对象的时候&#xff0c;采用new的方式&#xff0c;当对象不在被使用的时候&…

【网络】UDP/TCP网络程序

目录 UDP网络程序 简单通信版本(UDP) 准备工作&#xff08;接口学习、分析&#xff09; 整体代码&#xff08;Server.hpp/Server.cpp/Client.hpp/Client.cpp&#xff09; 添加“婴儿版”业务逻辑 英译汉翻译 my_shell 聊天室 linux和windows通信 TCP网络程序 简单通…

AB32VG1:SDK_AB53XX_V061(3)IO口复用功能的补充资料

文章目录 1.IO口功能复用表格2.功能映射寄存器 FUNCTION03.功能映射寄存器 FUNCTION14.功能映射寄存器 FUNCTION2 AB5301A的官方数据手册很不完善&#xff0c;没有开放出来。我通过阅读源码补充了一些关于IO口功能复用寄存器的资料。 官方寄存器文档&#xff1a;《 AB32VG1_Re…

chatgpt赋能python:Python怎么截屏Windows

Python怎么截屏Windows Python是一种高级编程语言&#xff0c;具有快速开发、易于学习、可移植性强等优点&#xff0c;因此在实现Windows屏幕截图方面也是一种非常强大的工具。 什么是Windows屏幕截图&#xff1f; Windows屏幕截图是将当前屏幕或窗口的图像保存成文件或剪贴…

Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为7870字&#xff0c;预计阅读12分钟 前言 接《Android BlueToothBLE入门&#xff08;一&#xff09;——低功耗蓝牙介绍》上篇&#xff0c;这篇文章主要就是来做Demo实现Android两台设备的数据通讯。 实现效…