小米2025年校招笔试真题手撕(一)

news2025/5/30 16:14:36

一、题目

小A每天都要吃a,b两种面包各一个。而他有n个不同的面包机,不同面包机制作面包的时间各不相同。第i台面包机制作a面包

需要花费ai的时间,制作b面包则需要花费bi的时间。

为能尽快吃到这两种面包,小A可以选择两个不同的面包机x,y同时工作,并分别制作a,b两种面包,花费的时间将是

max(ax,by)。

当然,小A也可以选择其中一个面包机x制作a,b两种面包,花费的时间将是ax+bx。

为能尽快吃到面包,请你帮小A计算一下,至少需要花费多少时间才能完成这两种面包的制作。

输入描述:

第一行一个正整数n,表示面包机的个数。

第二行n个正整数ai,表示面包机制作面包a的时间。

第三行n个正整数bi,表示面包机制作面包b的时间。

n ≤ 100000

a,b ≤ 100000

输出描述:输出一行一个正整数,表示需要花费的最少时间。

示例输入1

3

2 5 9

4 3 6

输出:

3

示例输入2

3

2 5 7

2 8 6

输出:

4

二、分析

该问题是关于如何计算制作两种面包的最短时间,涉及到选择单个面包机或者两个不同的面包机来同时工作。先分析单面包机的情况,只需要遍历所有面包机,找到制作 a 面包和 b 面包时间之和的最小值,这很容易,时间复杂度是 O(n)。但重点在于双面包机的情况,因为直接穷举所有可能的组合会导致时间复杂度高达 O(n²),对于大的 n 值来说不现实。因此,需要设计一个更高效的算法来找最小的 max(ax, by)。

可以考虑先对 a 和 b 的时间数组分别进行排序。然后使用两个指针分别遍历排序后的 a 和 b 数组,找到最优的组合。具体来说,先找到制作 a 面包最快和制作 b 面包最快的面包机,这样可能得到一个较小的 max(ax, by)。也可以尝试找出制作 a 面包最快的几个面包机,然后在对应的 b 面包时间中找较小的值,或者找出制作 b 面包最快的几个面包机,然后看对应的 a 面包时间。这种方法可能覆盖大部分最优解的情况。

在代码实现方面,读取输入的面包机数量和每个面包机的 a 和 b 时间。初始化两个数组来存储每个面包机的 a 和 b 时间。计算单个面包机情况下的最短时间,即找出所有面包机中 a 和 b 时间之和的最小值。然后处理两个面包机的情况,尝试找到两个不同的面包机 x 和 y,使得 max(ax, by) 最小。为此,可以将 a 和 b 时间数组分别排序,然后使用两个指针遍历排序后的数组,找到可能的最优组合。最后,综合单个面包机和两个面包机的情况,输出最小的时间值。

这种方法能够较好地平衡时间和空间效率,确保在大数据量下程序也能高效运行。需要注意处理边界情况,例如当只有一台面包机时只能选择单面包机的情况。通过这样的分析和代码实现,可以有效地解决题目要求的问题。

三、代码

下面是一个完整的 Python 代码示例,用于解决上述问题:

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

min_time = float('inf')

# 单面包机情况
for i in range(n):
    total = a[i] + b[i]
    if total < min_time:
        min_time = total

# 双面包机情况
# 找到制作 a 最快的面包机对应的 b 时间
min_a = min(a)
index_min_a = a.index(min_a)
 candidate_b = b[index_min_a]
if max(min_a, candidate_b) < min_time:
    min_time = max(min_a, candidate_b)

# 找到制作 b 最快的面包机对应的 a 时间
min_b = min(b)
index_min_b = b.index(min_b)
 candidate_a = a[index_min_b]
if max(candidate_a, min_b) < min_time:
    min_time = max(candidate_a, min_b)

print(min_time)

这个代码先计算每个面包机单独制作两种面包的时间之和,并找到其中的最小值。然后分别找到制作 a 面包和制作 b 面包最快的面包机,计算它们对应的双面包机情况的时间,并更新最小时间。最后输出最小时间。

但这样可能无法覆盖所有可能的最优解,比如可能存在某个面包机的 a 时间不是最小,但和另一个面包机的 b 时间组合起来更优的情况。

更好的方法是对所有可能的双面包机组合进行考虑:

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

min_time = float('inf')

# 单面包机情况
for i in range(n):
    min_time = min(min_time, a[i] + b[i])

# 双面包机情况
for i in range(n):
    for j in range(n):
        if i != j:
            current_time = max(a[i], b[j])
            if current_time < min_time:
                min_time = current_time

print(min_time)

但这种方法的时间复杂度是 O(n²),当 n 较大时(如 100000)会导致超时。

所以需要更高效的方法:

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

min_time = float('inf')

# 单面包机情况
for i in range(n):
    min_time = min(min_time, a[i] + b[i])

# 双面包机情况
min_a = min(a)
min_b = min(b)

min_time = min(min_time, max(min_a, min_b))

print(min_time)

这种方法只考虑制作 a 最快的面包机和制作 b 最快的面包机的组合,但这也可能错过一些更优的组合。

更合理的策略是:找到制作 a 面包的 k 台最快面包机和制作 b 面包的 k 台最快面包机,然后在这些有限的组合中寻找最优解。这里 k 可以设为 100 或其他较小的值。

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

min_time = float('inf')

# 单面包机情况
for i in range(n):
    min_time = min(min_time, a[i] + b[i])

# 双面包机情况
k = 100
sorted_a = sorted(range(n), key=lambda x: a[x])
sorted_b = sorted(range(n), key=lambda x: b[x])

for i in range(min(k, n)):
    for j in range(min(k, n)):
        if sorted_a[i] != sorted_b[j]:
            current_time = max(a[sorted_a[i]], b[sorted_b[j]])
            if current_time < min_time:
                min_time = current_time

print(min_time)

这种方法综合了单面包机和双面包机的情况,并在有限的组合中寻找最优解,平衡了效率和准确性。时间复杂度主要取决于排序操作和有限次的组合检查。

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

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

相关文章

《软件工程》第 11 章 - 结构化软件开发

结构化软件开发是一种传统且经典的软件开发方法&#xff0c;它强调将软件系统分解为多个独立的模块&#xff0c;通过数据流和控制流来描述系统的行为。本章将结合 Java 代码示例、可视化图表&#xff0c;深入讲解面向数据流的分析与设计方法以及实时系统设计的相关内容。 11.1 …

Neo4j(三) - 使用Java操作Neo4j详解

文章目录 前言一、创建项目二、导入依赖三、节点和关系数据打印四、创建节点与关系五、查询数据方法六、更新数据方法七、删除节点与关系方法八、合并数据方法九、完整代码1. 完整代码2. 项目下载 前言 本文介绍通过 Java 操作 Neo4j 图数据库的完整流程。主要涵盖开发环境搭建…

蓝桥杯3503 更小的数

问题描述 小蓝有一个长度均为 n 且仅由数字字符 0∼9 组成的字符串&#xff0c;下标从 0 到 n−1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。 小蓝想要将选出的子…

算法-全排列

1、全排列函数的使用 举例&#xff1a;{1,2,3}的全排列 #include<iostream> #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ll a[3] {1, 2, 3};do{for (ll i 0; i < 3;i){cout << a[i] << " ";}cout…

最好用的wordpress外贸主题

产品展示独立站wordpress主题 橙色的首页大banner外贸英文wordpress主题&#xff0c;适合用于产品展示型的外贸网站。 https://www.jianzhanpress.com/?p8556 Machine机器wordpress模板 宽屏简洁实用的wordpress外贸建站模板&#xff0c;适合工业机器生产、加工、制造的外贸…

2025 河北ICPC( D. 金泰园(二分)-- C.年少的誓约(公式转化))

文章目录 2025 河北ICPCD. 金泰园&#xff08;二分&#xff09;C.年少的誓约(公式转化)总结 2025 河北ICPC 题目链接&#xff1a; Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces sdccpc20250522 - Virtual Judge 赛时&#xff1a;5道 D. 金泰…

mongodb语法$vlookup性能分析

1 场景描述 mongodb有两个表department和user表&#xff0c; department表有_id,name,level&#xff0c;表有记录169w条 user表有_id,name,department_id&#xff0c;表有记录169w条&#xff0c;department_id没有创建索引&#xff0c;department_id是department的_id。 现…

晶圆隐裂检测提高半导体行业效率

半导体行业是现代制造业的核心基石&#xff0c;被誉为“工业的粮食”&#xff0c;而晶圆是半导体制造的核心基板&#xff0c;其质量直接决定芯片的性能、良率和可靠性。晶圆隐裂检测是保障半导体良率和可靠性的关键环节。 晶圆检测 通过合理搭配工业相机与光学系统&#xff0c…

在 LangChain 中集成 Mem0 记忆系统教程

目录 简介环境准备基础配置核心组件说明1. 提示模板设计2. 上下文检索3. 响应生成4. 记忆存储 工作流程解析使用示例关键特性完整代码与效果 简介 Mem0 是一个强大的记忆系统&#xff0c;可以帮助 AI 应用存储和检索历史对话信息。本教程将介绍如何在 LangChain 应用中集成 Me…

华润电力招聘认知能力测评及性格测评真题题库考什么?

华润电力招聘测评包含逻辑推理、数字推理、语言理解三大类型的问卷。共计58题。测评限时60分钟。其中逻辑推理、数字推理、语言推理分别限时20分钟&#xff0c;如逾时未完成相关测试&#xff0c;测试将自动终止&#xff0c;请注意测评时间。为了确保测评的连贯性&#xff0c;建…

Maven Profile在插件与依赖中的深度集成

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

手机平板等设备租赁行业MDM方案解析

目录 引言&#xff1a;MDM 在租赁行业的重要性日益凸显 用户场景&#xff1a;租赁公司面临的主要挑战 1. 设备丢失、逾期未还 2. 手动配置和恢复效率低 3. 非授权使用频繁 4. 时区设置混乱影响运维 5. 缺乏实时监管能力 EasyControl MDM&#xff1a;租赁设备的远程管控…

如何调试CATIA CAA程序导致的CATIA异常崩溃问题

问题背景&#xff1a;我采用CATIA CAA编写了一个界面的小程序&#xff0c;功能运行成功&#xff0c;但是每次运行完&#xff0c;关闭CATIA的时候&#xff0c;都会弹出这个对话框&#xff0c;这个对话框的意思是CATIA运行崩溃&#xff0c;点击确定后&#xff0c;CATIA就会意外关…

SQL查询效率以及索引设计

1. SQL 查询效率与数据库缓冲池机制 1.1. 数据库缓冲池&#xff08;Buffer Pool&#xff09; 磁盘 I/O 需要消耗的时间很多&#xff0c;而在内存中进行操作&#xff0c;效率则会高很多&#xff0c;为了能让数据表或者索引中的数据随时被我们所用&#xff0c;DBMS 会申请占用内…

day37打卡

知识点回顾&#xff1a;浙大疏锦行 过拟合的判断&#xff1a;测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint&#xff0c;还包含训练状态 早停策略 作业&#xff1a;对信贷数据集训练后保存权重&#xff0c;加载权重后继续训练50…

分布式缓存:证明分布式系统的 CAP 理论

文章目录 Pre一、分布式系统背景与特点二、CAP 三要素详解三、CAP 定理的反证证明四、CP 架构与 AP 架构对比典型场景 五、CAP 理论在系统设计中的应用六、总结 Pre 分布式缓存&#xff1a;CAP 理论在实践中的误区与思考 分布式缓存&#xff1a;BASE理论实践指南 分布式 - 从…

软件设计师“面向对象设计”真题考点分析——求三连

一、考点分值占比与趋势分析 综合知识历年考察统计 年份考题数分值占比考察重点2018334%继承类型、设计原则2019445.3%多态实现、类关系2020556.7%设计模式应用、接口隔离2021334%消息通信、封装特性2022668%开闭原则、组合模式2023556.7%模板方法、适配器模式2024445.3%单一…

AI大模型学习二十八、ACE-Step:生成式AI音乐大模型简介与安装(一)

一、说明 先来一首创作的歌&#xff1a; 在大模型和生成式AI模型大规模发达的今天&#xff0c;利用大模型生成音乐也是其中一个重要的发展方向。今天我们就介绍一个这样的音乐生成模型ACE-Step&#xff0c;可基于关键字和歌词生成歌曲&#xff1b;基于歌曲生成伴奏等等功能。 …

接口性能测试-工具JMeter的学习

接口登录链接http://111.230.19.204:8080/blog_login.html 一、JMeter基本使用流程 1、启动Jmeter 2、在“测试计划”下添加线程组 3、在“线程组”下添加“HTTP”取样器 4、填写“HTTP请求”的相关请求数据 5、在“线程组”下添加“查看结果树”监听器 6、点击“启动”按钮…

python如何离线安装pandas,numpy

1.首先在有网的电脑上正常安装python&#xff08;和离线环境一样的版本&#xff09; 然后 pip install pandas &#xff08;不嫌麻烦的话也可以自己手动去pandas PyPI​​​​​​​ 一个个下载&#xff09; 安装好后导出相关包&#xff0c;使用如下指令 2.然后相关依赖包就…