小米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(n2),對于大的 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(n2),當 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
繁體地址,請注明出處:http://hk.pswp.cn/news/906560.shtml
英文地址,請注明出處:http://en.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是一個頁面容器…