如何在华为OD机试中获得满分?Java实现【静态代码扫描服务】一文详解!

news2024/11/26 6:03:27

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
  • 2. 输入描述
  • 3. 输出描述
  • 4. Java算法源码
  • 5. 测试
  • 6.解题思路

1. 题目描述

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

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

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

2. 输入描述

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

3. 输出描述

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

4. 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);
}

5. 测试

在这里插入图片描述

6.解题思路

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

在这里插入图片描述

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

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

相关文章

【iOS】—— Tagged Pointer对象

文章目录 关于Tagged PointerNSTaggedPointer示例TaggedPointer 结构Tagged Pointer特点注意事项isa指针64位下的isa指针优化 本来打算细看一下weak的底层原理&#xff0c;看到了出现了很多次Tagged Pointer对象&#xff0c;就先来学一下Tagged Pointer&#xff0c;在之前刚学习…

chatgpt赋能python:Python隐藏CMD窗口

Python隐藏CMD窗口 Python是一种高级编程语言&#xff0c;已被广泛用于各种领域&#xff0c;从Web开发到数据科学。Python的一个非常有用的特性是它可以通过CMD窗口运行脚本&#xff0c;但在某些情况下&#xff0c;隐藏CMD窗口可能是必要的。 为什么要隐藏CMD窗口&#xff1f…

如何在华为OD机试中获得满分?Java实现【微服务的集成测试】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

一图看懂 pycodestyle 模块:一个检查Python代码是否符合PEP8风格约定的工具,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pycodestyle 模块&#xff1a;一个检查Python代码是否符合PEP8风格约定的工具&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块…

chatgpt赋能python:Python中数字转换的完整指南

Python中数字转换的完整指南 转换数字是Python编程过程中经常需要的操作之一。Python提供了许多内置函数和库&#xff0c;可以方便地将数字转换为各种格式和数据类型。在本文中&#xff0c;我们将介绍Python中数字转换的完整指南&#xff0c;包括各种转换方法和最佳实践。 内…

chatgpt赋能Python-python_读取bin

介绍 Python 作为一种高级编程语言&#xff0c;已经被广泛地应用在各种领域&#xff0c;包括科学计算、人工智能、Web 开发等等。在这些领域中&#xff0c;二进制文件的处理是不可避免的。Python 也提供了一些库和工具&#xff0c;让我们可以方便地读取和处理二进制文件。本文…

ChatGPT与讯飞星火实测对比

文章目录 一、推理测试测试提示词1&#xff1a;假设树上有10只鸟&#xff0c;开枪打死1只&#xff0c;那么树上还有几只鸟?- 测试提示词2&#xff1a;一艘船10天可以渡过太平洋&#xff0c;请计算10艘船多少天可以渡过太平洋。测试提示词3&#xff1a;我爸妈结婚的时候为什么不…

vue-i18n安装配置使用示例,并介绍在模版文本、组件方法、js,f方法里的使用

vue-i18n是一个项目的国际化组件&#xff0c;可以切换多个语言版本,很多vue项目都是用这个插件来处理语言切换的。 基本操作 1&#xff0c;安装引用&#xff1a; $ npm install vue-i18n<script src"https://unpkg.com/vue/dist/vue.js"></script> &…

Radxa ROCK 5A 开箱 vs 树莓派

Rock5 Model A 是一款高性能的单板计算机&#xff0c;它采用了 RK3588S (8nm LP 制程&#xff09;处理器&#xff0c;具有 4 个高达 2.4GHz 的 ARM Cortex-A76 CPU 核心、4 个高达 1.8GHz 的 Cortex-A55 内核和 Mali-G610 MP4 GPU。更重要的是&#xff0c;它还有一个高达 6TOPS…

chatgpt赋能python:Python词频分析:为什么Python是数据科学家和工程师的首选?

Python 词频分析&#xff1a;为什么 Python 是数据科学家和工程师的首选&#xff1f; Python 是一种通用、开放源代码、高级编程语言&#xff0c;近年来一直是数据科学和工程领域中最受欢迎的编程语言之一。Python 强大的数据处理能力迅速成为行业的首选&#xff0c;但是仅靠这…

linux中和,|和||及分号(;)的用法

在linux中&#xff0c;我们经常会用到&和&&&#xff0c;|和||及分号(;)&#xff0c;但是好多人对其会混淆&#xff0c;不明白其中的意思&#xff0c;今天为大家讲解一下&和&&&#xff0c;|和||及分号(;)各自的说明和用法。 1.& & 表示程序…

Linux-0.11 boot目录head.s详解

Linux-0.11 boot目录head.s详解 模块简介 在head.s中&#xff0c;操作系统主要做了如下几件事&#xff1a; 重新设置中断描述符和全局描述符检查A20地址线是否开启检查数学协处理器初始化页表并开启分页跳转到main函数执行 过程详解 重新设置IDT和GDT 在setup.s中我们已经…

chatgpt赋能python:Python逆序排列:从入门到精通

Python 逆序排列&#xff1a;从入门到精通 Python 语言因其简单易学、性能高效、多平台支持等优点而备受青睐。而在 Python 中进行逆序排列操作是我们经常需要用到的一个功能&#xff0c;本篇文章将详细介绍 Python 中的逆序排列操作。 什么是逆序排列&#xff1f; 逆序排列…

chatgpt赋能python:Python行转列:如何高效地处理大数据集

Python行转列&#xff1a;如何高效地处理大数据集 Python是一种广泛使用的编程语言&#xff0c;最初用于Web开发&#xff0c;如今已成为专业开发、科学计算和数据分析等领域的一种首选语言。Python非常方便&#xff0c;尤其是在处理大数据集时。本文将介绍如何使用Python将行数…

Protobuf协议初级详解(python使用)从安装到序列化-反序列化

教程 一、前言二、效果三、教程1&#xff09;安装2&#xff09;使用1.创建.proto文件2.proto语法3.protoc.exe文件编译.proto语法文件4.序列化5.反序列化 四、借鉴 一、前言 Protobuf是一种轻便高效的结构化数据存储格式&#xff0c;可以用于结构化数据序列化&#xff0c;很适合…

chatgpt赋能python:Python随机抽取:提高数据样本代表性的利器

Python随机抽取&#xff1a;提高数据样本代表性的利器 在数据分析和机器学习领域&#xff0c;我们经常需要对数据进行随机抽样以获得更有代表性的数据集。而Python提供了很多方便易用的函数和库&#xff0c;使得数据抽样变得更加简单和高效。 random库&#xff1a;生成随机序…

chatgpt赋能python:Python随机选择数字

Python随机选择数字 如果你正在寻找一种简单的方法在Python中选择随机数字&#xff0c;那么你来对地方了&#xff01;在这篇文章里&#xff0c;我们将介绍Python的内置模块random和它的方法来选择随机数字。 什么是Python的Random模块&#xff1f; Python的random模块是一个…

chatgpt赋能python:Python中的随机选择:介绍和应用

Python中的随机选择&#xff1a;介绍和应用 Python是一种流行的编程语言&#xff0c;广泛应用于数据科学、人工智能和网络开发等领域。Python中有许多方便的功能和库&#xff0c;使得编程工作更加轻松和高效。其中一个重要的库是random模块&#xff0c;它可以用来生成随机数和…

横向移动-传递攻击SMB服务利用psexecsmbexec

win2012以上版本&#xff0c;关闭了wdigest 或者安装了 KB287199补丁。无法获取明文密码 总的来说就是win2012后无法获取明文密码 解决办法就是&#xff1a; 1.可以利用哈希hash传递&#xff08;pth&#xff0c;ptk等进行移动&#xff09; 2.利用其他服务协议&#xff08;S…

chatgpt赋能python:【Python实例教程】如何使用Python计算长方形面积

【Python实例教程】如何使用Python计算长方形面积 Python是一种广泛使用的高级编程语言&#xff0c;因其易学易用的特性而备受推崇。Python在编写程序时也可以很方便地进行数学计算。本篇文章将介绍如何使用Python计算长方形的面积&#xff0c;希望对Python初学者有所帮助。 …