尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

华为OD机试真题 新系统 2026-08-09 Python、JS【查找最佳充电策略】

华为OD机试真题 新系统 2026-08-09 Python、JS【查找最佳充电策略】 目录题目思路Code题目题目内容给定一个电费组 priceArray表示未来 priceRecords 小时内每小时的电价单位为分/kWh。找出充电成本最低的连续 hours 个小时的时间段开始时刻点。若存在多种成本最低方案优先返回成本最低方案中最早的时间点。输入描述本题为核心代码模式需要实现函数 bestChargeStart(priceRecords, hours, priceArray)。参数 priceRecords 表示电价记录数量满足 1 priceRecords 24。参数 hours 表示需要连续充电的小时数满足 1 hours priceRecords。参数 priceArray 为长度为 priceRecords 的整数数组priceArray[i] 表示第 i 小时的电价满足 1 priceArray[i] 100。本地命令行版本支持输入形如 priceRecords 12, hours 3, priceArray [25,15,20,18,12,25,30,28,22,16,14,35] 的一行文本也支持先输入 priceRecords hours再输入 priceArray 数组。输出描述返回一个整数表示最低充电时间段的起始索引索引从 0 开始计数。样例 1输入priceRecords 12, hours 3, priceArray [25,15,20,18,12,25,30,28,22,16,14,35]输出2说明连续 3 小时电价和最小的是索引 2 开始的 20,18,12总成本为 50。思路整体思路题目要求固定长度 hours 的连续区间最小和因此使用滑动窗口可以在一次扫描中得到答案。第一步先计算前 hours 个小时的电价和作为第一个候选窗口。这个窗口对应起始索引 0。第二步从第 hours 个位置开始向右滑动窗口每次加入新的小时电价同时移除窗口最左侧的旧电价从而用 O(1) 时间得到当前窗口成本。第三步若当前窗口成本小于历史最低成本则更新最低成本和答案索引。若当前窗口成本等于历史最低成本不更新答案因为题目要求并列时返回最早的时间点。边界处理当 hours 等于 priceRecords 时只有一个可选窗口答案为 0。复杂度分析数组只扫描一遍时间复杂度 O(priceRecords)只使用常数个变量空间复杂度 O(1)。Codeimport re import sys def parse_input(text): nums list(map(int, re.findall(r-?\d, text))) # 输入是核心代码模式的参数文本本地运行时先提取其中所有整数。 return nums[0], nums[1], nums[2:2 nums[0]] def solve(price_records, hours, prices): # 前两个整数分别是记录数量和连续充电时长后面才是电价数组。 window sum(prices[:hours]) # 窗口长度固定为 hours因此只需要维护当前窗口的电价总和。 best_sum window # 先计算起点为 0 的窗口成本作为后续比较的初始最优值。 best_start 0 # 窗口右移时加入新的右端电价同时减去离开的左端电价。 for right in range(hours, price_records): # start 表示当前窗口起始索引和题目要求的返回值一致。 window prices[right] - prices[right - hours] start right - hours 1 # 只有当前成本严格更小时才更新答案成本相同保留更早起点。 if window best_sum: best_sum window # hours 等于 priceRecords 时循环不会进入答案自然保持 0。 best_start start return best_start # 输出只打印最优起始索引不额外拼接其他说明文本。 print(solve(*parse_input(sys.stdin.read())))JSconst fs require(fs); // 输入是核心代码模式的参数文本本地运行时先提取其中所有整数。 const text fs.readFileSync(0, utf8); function parseNumbers(text) { // 前两个整数分别是记录数量和连续充电时长后面才是电价数组。 return [...text.matchAll(/-?\d/g)].map((m) Number(m[0])); } function solve(priceRecords, hours, prices) { // 窗口长度固定为 hours因此只需要维护当前窗口的电价总和。 let window 0; for (let i 0; i hours; i) { window prices[i]; } // 先计算起点为 0 的窗口成本作为后续比较的初始最优值。 let bestSum window; let bestStart 0; // 窗口右移时加入新的右端电价同时减去离开的左端电价。 for (let right hours; right priceRecords; right) { window prices[right] - prices[right - hours]; const start right - hours 1; // start 表示当前窗口起始索引和题目要求的返回值一致。 if (window bestSum) { bestSum window; // 只有当前成本严格更小时才更新答案成本相同保留更早起点。 bestStart start; } } // hours 等于 priceRecords 时循环不会进入答案自然保持 0。 return bestStart; } const nums parseNumbers(text); const priceRecords nums[0]; const hours nums[1]; const prices nums.slice(2, 2 priceRecords); // 输出只打印最优起始索引不额外拼接其他说明文本。 console.log(solve(priceRecords, hours, prices));【华为od机试真题PythonJSJavaGo合集】【超值优惠】Py/JS/Java/Go合集【华为od机试真题Python】Python真题题库【华为od机试真题JavaScript】JavaScript真题题库【华为od机试真题JavaGo】JavaGo真题题库【华为od机试真题C】C真题题库【华为od机试真题C语言】C语言真题题库【华为od面试手撕代码题库】面试手撕代码题库【华为od机试面试交流群】【文章底部有二维码链接可扫码加交流群】华为OD机试:二本院校有机会吗? 有机会,但不大,大神除外!机考分数越高越好,所以需要提前刷题。机考通过后,如果没有收到面试邀请,也不要着急,非目标院校面试邀请发的时间比较晚。非目标院校今年有点难,机试至少要考到350分,所以需要疯狂刷题,华为OD机考是有题库的,最好在考前完所有题库题目。华为OD机试:跨专业可以参加华为OD可以,但是如果你的本科院校比较差,上岸概率不大。华为OD机试:华为OD简历被锁定机试通过,性格测试也通过,但是没人联系面试,发现简历被锁定。此时需要主动去联系HR。让他帮助你查询原因。
返回列表