【华为机试真题详解 Python实现】静态扫描最优成本【2023 Q1 | 100分】

news2025/7/11 18:33:44

文章目录

  • 前言
  • 题目描述
  • 输入描述
  • 输出描述
  • 示例 1
    • 输入:
    • 输出:
  • 示例 2
    • 输入:
    • 输出:
  • 题目解析
  • 参考代码


前言

《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。

如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!

本文解法非最优解(即非性能最优),不能保证通过率。

特别提醒!!!!
注意1:机试为ACM 模式
你的代码需要处理输入输出,input接收输入、print格式化输出

注意2:机试按通过率记分
复杂题目可以考虑暴力破解,再逐步优化,不是运行超时就无法得分,如下,提交结果运行超时,但用例通过率>92.31% , 如果是100分的题目,可以得92.3分。
在这里插入图片描述

题目描述

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

  1. 文件扫描的成本和文件大小相关,如果文件大小为 ,则扫描成本为 N个金币
  2. 扫描报告的缓存成本和文件大小无关,每缓存一个报告需要M个金币
  3. 扫描报告缓存后,后继再碰到该文件则不需要扫描成本,直接获取缓存结果
    给出源代码文件标识序列和文件大小序列,求解采用合理的缓存策略,最少需要的 金币Q

输入描述

第一行为缓存一个报告金币数 M,1 <= M <=100
第二行为文件标识序列: F1,F2,F3…Fn,其中1 <= N <= 10000,1 <= F <=1000
第三行为文件大小序列: S1,S2,S3…Sn,其中1 <= N <= 10000,1 <= S <=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

说明:
2号文件出现了8次,不缓存成本为 3*8=24,扫描加缓存成本共计 3+5=8,显然缓存更优,最优成本为 8+1=9

题目解析

获取文件的方式有两种:
第一种是扫描文件,成本包含扫描文件成本;
第二种是从缓存中读取文件,成本包含一次扫描文件成本 + 缓存文件的成本。

我们只需要获取到每个文本的扫描次数与缓存方案的成本进行比较,单个文件选择最优方案,整体成本即为最优方案(贪婪)。

这个方式再业务中也有很多应用场景,例如:
数据访问优化,对于数据库热点数据的访问,首先从数据库获取数据,生成键值并存储在缓存中,下次再获取该数据时直接从缓存中加载,减少数据获取的延时。

在业务场景中高速缓存的使用成本较高,我们可能需要考虑过期时间、淘汰策略等问题,而这道题目中没有缓存加载顺序,使用限制等说明,所以这道题目中不需要考虑。

在这里插入图片描述

参考代码


while 1:
    try:
        m = int(input())
        fList = list(map(int, input().split()))
        sList = list(map(int, input().split()))

        cache = []
        total = 0
        for i in range(len(fList)):
            if fList[i] in cache:
                continue

            cache.append(fList[i])
            c = fList.count(fList[i])
            total += min(sList[i] * c, sList[i] + m)

        print(total)
    except Exception as e:
        break

或者保存分项

while 1:
    try:
        m = int(input())
        fList = list(map(int, input().split()))
        sList = list(map(int, input().split()))

        cache = {}
        for i in range(len(fList)):
            if fList[i] in cache:
                continue

            c = fList.count(fList[i])
            cache[fList[i]] = min(sList[i] * c, sList[i] + m)

        print(sum(cache.values()))
    except Exception as e:
        import traceback
        print(traceback.print_exc())
        break

最后,如果你有什么样的问题或解题心得,欢迎评论区交流!

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

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

相关文章

【微信小程序项目实战】TodoList-环境配置(1)

目录前言简介环境配置TDesign图片页面文件文件基础配置app.wxssapp.jsontodo.json前言 本项目依据开源项目:点击前往 GITHUB 仓库 仿照搭设而成&#xff0c;并主要对其中原理以及方法做出详细分析解读&#xff0c;望大家多多支持原作者&#xff01; 简介 本项目将使用最新版…

C#开发的OpenRA的游戏主界面怎么样创建5

继续游戏主界面创建的主题, 前面已经介绍到怎么样创建一个OpenRA的帐号显示, 接着下来介绍中间显示新闻的消息窗口,如下图所示: 这个界面看起来比较简单,只有一个下拉按钮显示,但是背后的实现是比较复杂的。 因为它要实现一个对话框的窗口显示,那需要编写的代码和设计思…

字节3次都没裁掉的7年老测试。掌握设计业务与技术方案,打开上升通道!

前言职场中的那些魔幻操作&#xff0c;研发最烦的是哪个&#xff1f;“面对业务需求的时候&#xff0c;可能都听过这样一句话&#xff1a;这个很简单&#xff0c;直接开发&#xff0c;三天内上线&#xff1b;”朋友说&#xff1a;“产品听了流泪&#xff0c;测试见了崩溃&#…

Linux系统CPU占用率较高问题排查思路

作为工程师&#xff0c;在日常工作中我们会遇到 Linux服务器上出现CPU负载达到100%居高不下的情况&#xff0c;如果CPU 持续跑高&#xff0c;则会影响业务系统的正常运行&#xff0c;带来企业损失。对于CPU过载问题通常使用以下两种方式即可快速定位&#xff1a;方法一第一步&a…

STC单片机RTC时钟使用介绍

STC单片机RTC时钟使用介绍 ✨目前支持RTC功能的STC单片机型号只有带型号后面带TL\T的STC8以及STC8H8K64U B/C/D版本以及STC32G型号的单片机支持此功能.手上的STC8H8K64U单片机,B版本在实际测试中并没有成功,使用STC32G测试没有问题。 🎞使用STC8H8K64U B版本打印效果: 🔖…

springboot整合Quartz(1)

文章目录前言一 理论基础1.1 小顶堆(平衡二叉堆)1.2 小顶堆的存取方式1.2.1 插入顶堆元素1.2.2 删除顶堆元素1.3 任务与小顶堆1.3 时间轮算法二 Spring Boot集成JDK定时任务2.1 TaskQueue源码分析2.2 TimerThread源码分析2.2.1 Timer构造器2.2.2 Timer类中的执行方法2.2.3 Time…

深浅拷贝——利用模拟实现basic_string深入理解

深浅拷贝——利用模拟实现basic_string深入理解 一、深浅拷贝的基本概念 深拷贝和浅拷贝都是指在对象复制时&#xff0c;复制对象的内存空间的方式。 1.1 深浅拷贝的不同之处 浅拷贝是指将一个对象的所有成员变量都直接拷贝给另一个对象&#xff0c;包括指针成员变量&#…

Matlab进阶绘图第5期—风玫瑰图(WindRose)

风玫瑰图(Wind rose diagram)是一种特殊的极坐标堆叠图/统计直方图&#xff0c;其能够直观地表示某个地区一段时期内风向、风速的发生频率。 风玫瑰图在建筑规划、环保、风力发电、消防、石油站设计、海洋气候分析等领域都有重要作用&#xff0c;所以在一些顶级期刊中也能够看…

Vue键盘事件的使用

前言 在vue中&#xff0c;我们经常会用到键盘事件&#xff0c;不管是我们按下某个键&#xff0c;其实都是一次键盘事件的调用&#xff0c;下面就介绍下Vue中的键盘事件 先写一段代码&#xff0c;这里我选择的键盘事件是keyup,当然用keydown也是没问题的 问题来了&#xff0c;…

基于Redis实现分布式自增主键

文章目录一、原理二、实战1、maven中新增redis依赖2、redis连接属性配置3、自定义Redis主键生成器RedisIdentifierGenerator4、指定主键id的生成策略IdType.ASSIGN_ID5、测试一、原理 基于Redis实现分布式自增主键的核心原理是INCR命令&#xff0c;每次调用将对应键 key 储存的…

生成ExecutionGraph

文章目录step 1&#xff1a;构建ExecutionJobVertex节点step 2&#xff1a;创建ExecutionEdge&#xff0c;按照拓扑模式进行连接总结JobGraph由JobVertex&#xff08;顶点&#xff09;和IntermediateDataSet&#xff08;中间结果数据集&#xff09;组成&#xff0c;其中JobVert…

深度学习笔记-1.基本的数据操作

数据的基本操作1-tensor创建2-功能函数3-算术操作4-数据操作4_1. index_select4_2. masked_select4_3. torch.nonzero4_4. torch.gather4_5. view5-线性函数6-Tensor与Numpy相互转换6_1. broadcasting6_2. 内存机制6_3. 自动梯度求导在深度学习中&#xff0c;我们通常会频繁地对…

佩戴舒适真无线蓝牙耳机怎么选?久戴不痛的蓝牙耳机推荐

本身佩戴蓝牙耳机听音乐是一件舒心&#xff0c;非常享受的事情&#xff0c;但是&#xff0c;因为每个人的耳道都不一样&#xff0c;所以有很多人因为佩戴不舒适而选择放弃蓝牙耳机。今天&#xff0c;小编特意给大家搜集了4款公认佩戴最舒适的蓝牙耳机&#xff0c;让佩戴不再成为…

实验6 图像压缩

本次实验大部分素材来源于山大王成优老师的讲义以及冈萨雷斯&#xff08;MATLAB版&#xff09;&#xff0c;仅作个人学习笔记使用&#xff0c;禁止用作商业目的。 文章目录一、实验目的二、实验例题1. 二维离散余弦变换(Discrete Cosine Transform, DCT)的基图像2. JPEG 压缩2.…

扬帆优配|太猛了!最高暴拉170%,港股这一板块狂飙!“带货”起飞?

A股商场和港股商场上午均跌落&#xff0c;不过到上午收盘&#xff0c;A股商场上涨个股数量多于跌落个股。 港股方面&#xff0c;首要指数跌幅较大&#xff0c;但影视传媒股鹤立鸡群&#xff0c;团体大涨。其间&#xff0c;为内地观众所熟知的TVB母公司今天上午股价再度暴升&…

如何搞定MySQL锁(全局锁、表级锁、行级锁)?这篇文章告诉你答案!太TMD详细了!!!

概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&…

文件如何批量复制保存在多个文件夹中

在日常工作中经常需要整理文件&#xff0c;比如像文件或文件夹重命名或文件批量归类&#xff0c;文件批量复制到指定某个或多个文件来中保存备份起来。一般都家最常用方便是手动一个一个去重命名或复制到粘贴到某个文件夹中保存&#xff0c;有没有简单好用的办法呢&#xff0c;…

第九届省赛——8等腰三角形(找规律)

题目&#xff1a;本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是&#xff1a;1. 先用1,2,3&#xff0c;...的自然数拼一个足够长的串2. 用这个串填充三角形的三条边。从上方顶点开始&#xff0c;逆时针填充。比如&#xff0c;当三角形高度是8时&#xff1a…

【卷积神经网络】激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / GeLU

文章目录一、Tanh二、Sigmoid三、ReLU四、Leaky ReLU五、ELU六、SiLU七、Mish本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被称为线性激活&#xff0c;其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练&#xff0c;但不能学习…

蓝桥杯C/C++b组第一题个人整理合集(5年真题+模拟题)

蓝桥杯C/Cb组填空第一题合集 前言 比赛标准的签到题&#xff0c;比赛时的第一题。不会考到什么算法&#xff0c;甚至都不需要你打代码。但有时候第一题都没做出来的确是非常挫灭信心 看了看历年题目。很多小陷阱也不少 今年的比赛也正好还有一个月&#xff0c;自己对填空题第…