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

一、题目

小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_timeprint(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_timeprint(min_time)

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

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

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

相关文章

【微信小程序 + 高德地图API 】键入关键字搜索地址,获取经纬度等

前言 又到熟悉的前言&#xff0c;接到个需求&#xff0c;要引入高德地图api&#xff0c;我就记录一下&#xff0c;要是有帮助记得点赞、收藏、关注&#x1f601;。 后续有时间会慢慢完善一些文章&#xff1a;&#xff08;画饼时间&#xff09; map组件自定义气泡、mark标记点…

uni-app(2):页面

1 页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中&#xff0c;后缀名是.vue文件或.nvue文件。 这些页面均全平台支持&#xff0c;差异在于当 uni-app 发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&…

Axure实战:智慧水务管理系统原型设计速览

本原型通过Axure构建覆盖生产到服务的全流程交互模型&#xff0c;聚焦"数据驱动智能决策"核心价值&#xff0c;助力水务企业实现管理效率提升与运营成本优化。 系统采用"13N"架构&#xff1a; 1个统一入口&#xff1a;集成单点登录与角色动态权限&#xff…

十二、Linux实现截屏小工具

系列文章目录 本系列文章记录在Linux操作系统下&#xff0c;如何在不依赖QT、GTK等开源GUI库的情况下&#xff0c;基于x11窗口系统&#xff08;xlib&#xff09;图形界面应用程序开发。之所以使用x11进行窗口开发&#xff0c;是在开发一个基于duilib跨平台的界面库项目&#x…

蓝桥杯分享经验

系列文章目录 提示&#xff1a;小白先看系列 第一章 蓝桥杯的钱白给吗 文章目录 系列文章目录前言一、自我介绍二、经验讲解:1.基础知识2.进阶知识3.个人观点 三、总结四、后续 前言 第十六届蓝桥杯已经省赛已经结束了&#xff0c;相信很多小伙伴也已经得到自己的成绩了。接下…

XC3588H搭载国产麒麟系统可用于政务/社保一体机吗?

答案是肯定的。 向成电子XC3588H搭载的国产银河麒麟系统和国产星光麒麟系统已完成适配&#xff0c;适用于政务服务、社保服务一体机的所有外设&#xff0c;运行稳定流畅。 在数字化政务快速发展的今天&#xff0c;政务服务终端的稳定性、安全性与高效性成为提升群众办事体验的关…

如何排查服务器 CPU 温度过高的问题并解决?

服务器CPU温度过高是一个常见的问题&#xff0c;可能导致服务器性能下降、系统稳定性问题甚至硬件损坏。有效排查和解决服务器CPU温度过高的问题对于确保服务器正常运行和延长硬件寿命至关重要。本文将介绍如何排查服务器CPU温度过高的问题&#xff0c;并提供解决方法&#xff…

物联网、云计算技术加持,助推楼宇自控系统实现智能高效管理

在建筑智能化发展的进程中&#xff0c;楼宇自控系统作为实现建筑高效管理的核心载体&#xff0c;正面临着数据海量复杂、设备协同困难、管理响应迟缓等挑战。而物联网与云计算技术的深度融合&#xff0c;为楼宇自控系统的升级提供了全新的解决方案&#xff0c;赋予其智能感知、…

uni-app使用大集

1、手动修改页面标题 uni.setNavigationBarTitle({title: 修改标题 }); 2、单选 不止有 radio-group&#xff0c;还有 uni-data-checkbox 数据选择器 <!-- html部分 --> <uni-data-checkbox v-model"sex" :localdata"checkboxList"></u…

(6)python爬虫--selenium

文章目录 前言一、初识selenium二、安装selenium2.1 查看chrome版本并禁止chrome自动更新2.1.1 查看chrome版本2.1.2 禁止chrome更新自动更新 2.2 安装对应版本的驱动程序2.3安装selenium包 三、selenium关于浏览器的使用3.1 创建浏览器、设置、打开3.2 打开/关闭网页及浏览器3…

基于OpenCV的人脸微笑检测实现

文章目录 引言一、技术原理二、代码实现2.1 关键代码解析2.1.1 模型加载2.1.2 图像翻转2.1.3 人脸检测 微笑检测 2.2 显示效果 三、参数调优建议四、总结 引言 在计算机视觉领域&#xff0c;人脸检测和表情识别一直是热门的研究方向。今天我将分享一个使用Python和OpenCV实现…

Java 大视界 -- 基于 Java 的大数据分布式存储在视频会议系统海量视频数据存储与回放中的应用(263)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

Kotlin 极简小抄 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)

Kotlin 概述 Kotlin 由 JetBrains 开发&#xff0c;是一种在 JVM&#xff08;Java 虚拟机&#xff09;上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性&#xff0c;同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言&#xff0c;也可…

gitlab+portainer 实现Ruoyi Vue前端CI/CD

1. 场景 最近整了一个Ruoyi Vue 项目&#xff0c;需要实现CICD&#xff0c;经过一番坎坷&#xff0c;最终达成&#xff0c;现将技术要点和踩坑呈现。 具体操作流程和后端大同小异&#xff0c;后端操作参考连接如下&#xff1a; https://blog.csdn.net/leinminna/article/detai…

RNN神经网络

RNN神经网络 1-核心知识 1-解释RNN神经网络2-RNN和传统的神经网络有什么区别&#xff1f;3-RNN和LSTM有什么区别&#xff1f;4-transformer的归一化有哪几种实现方式 2-知识问答 1-解释RNN神经网络 Why&#xff1a;与我何干&#xff1f; 在我们的生活中&#xff0c;很多事情…

javaweb-html

1.交互流程&#xff1a; 浏览器向服务器发送http请求&#xff0c;服务器对浏览器进行回应&#xff0c;并发送字符串&#xff0c;浏览器能对这些字符串&#xff08;html代码&#xff09;进行解释&#xff1b; 三大web语言&#xff1a;&#xff08;1&#xff09;html&#xff1a…

从混乱到高效:我们是如何重构 iOS 上架流程的(含 Appuploader实践)

从混乱到高效&#xff1a;我们是如何重构 iOS 上架流程的 在开发团队中&#xff0c;有一类看不见却至关重要的问题&#xff1a;环境依赖。 特别是 iOS App 的发布流程&#xff0c;往往牢牢绑死在一台特定的 Mac 上。每次需要发版本&#xff0c;都要找到“那台 Mac”&#xff…

FPGA:CLB资源以及Verilog编码面积优化技巧

本文将先介绍Kintex-7系列器件的CLB&#xff08;可配置逻辑块&#xff09;资源&#xff0c;然后分享在Verilog编码时节省CLB资源的技巧。以下内容基于Kintex-7系列的架构特点&#xff0c;并结合实际设计经验进行阐述。 一、Kintex-7系列器件的CLB资源介绍 Kintex-7系列是Xilin…

在linux里上传本地项目到github中

首先先安装git&#xff0c;安装完git后&#xff0c;输入如下操作指令&#xff1a; 输入自己的用户名和邮箱&#xff08;为注册GITHUB账号时的用户名和邮箱&#xff09;&#xff1a; git config --global user.name "111"git config --global user.email "121…

鸿蒙Flutter实战:25-混合开发详解-5-跳转Flutter页面

概述 在上一章中&#xff0c;我们介绍了如何初始化 Flutter 引擎&#xff0c;本文重点介绍如何添加并跳转至 Flutter 页面。 跳转原理 跳转原理如下&#xff1a; 本质上是从一个原生页面A 跳转至另一个原生页面 B&#xff0c;不过区别在于&#xff0c;页面 B是一个页面容器…