
目录题目思路Code题目题目内容请开发一个快递驿站计费系统根据给定的一组快递存取记录系统计费每位业主要缴纳的总费用并按总费用从高到低输出。系统计费规则如下免费存放时间为 12 小时从存件时间开始计时总存放时间 ⩽12 小时不收费存放时间 取件时间 − 存件时间超出免费存放时间的每 12 小时收取 1 元不足 12 小时按 12 小时计算比如存放了 25 个小时超出免费时间 13 小时需要收费 2 元同一个房间号的业主可能有多条存取记录需要将业主所有快递的超时费用累加得到总费用。输入描述输入二维数组每条记录依次是存件时间、取件时间和房间号。0 存件时间 取件时间 100000100 房间号 100001 记录数 1000。输出描述输出 [房间号,总费用] 数组按费用降序费用相同按房间号升序。样例 1输入[[100, 110, 1111], [200, 210, 2222], [150, 165, 3333], [180, 190, 1111]]输出[[3333,1],[1111,0],[2222,0]]样例 2输入[[10, 30, 303], [25, 50, 303], [40, 70, 201], [60, 90, 201], [100, 130, 102], [150, 180, 102]]输出[[102,4],[201,4],[303,3]]思路整体思路逐条计算费用按房间聚合后双关键字排序。第一步每三个整数还原一条存取记录。第二步对超过 12 小时的部分除以 12 并向上取整。第三步按房间累计再按费用降序和房间号升序排序。边界处理零费用房间仍输出恰好 12 小时免费恰好 24 小时收费 1 元。复杂度分析时间 O(NR log R)空间 O(R)。Codeimport re import sys from collections import defaultdict # 输入整数每三个还原为存件时间、取件时间和房间号。 # 同一房间可能出现多次每处理一条记录就把本单费用加到该房间已有总费用上。 # 循环下标每次增加 3因此第 i、i1、i2 个数字始终属于同一条快递记录。 numbers list(map(int, re.findall(r\d, sys.stdin.read()))) fees defaultdict(int) for i in range(0, len(numbers), 3): stored, picked, room numbers[i:i 3] duration picked - stored # 12 小时内免费超时部分按 12 小时一档向上取整。 # 例如存放 25 小时会超时 13 小时(1311)/12 的整数除法结果为 2 元。 fees[room] 0 if duration 12 else (duration - 12 11) // 12 # 费用降序优先并列时房间号升序。 # 比较器先看费用只有费用相等时才比较房间号避免并列结果顺序不确定。 answer sorted(fees.items(), keylambda item: (-item[1], item[0])) # 手动拼接题目要求的无空格二维数组。 # 输出中的每个内层数组依次放房间号和总费用元素之间只保留题目要求的逗号。 print([ ,.join(f[{room},{fee}] for room, fee in answer) ])JSconst fs require(fs); // 每三个整数依次还原为存件时间、取件时间和房间号。 // 同一房间可能出现多次每处理一条记录就把本单费用加到该房间已有总费用上。 // 循环下标每次增加 3因此第 i、i1、i2 个数字始终属于同一条快递记录。 const numbers (fs.readFileSync(0, utf8).match(/\d/g) || []).map(Number); const fees new Map(); for (let i 0; i 2 numbers.length; i 3) { const duration numbers[i 1] - numbers[i], room numbers[i 2]; // 12 小时内免费超时部分按 12 小时向上取整。 // 例如存放 25 小时会超时 13 小时(1311)/12 的整数除法结果为 2 元。 const fee duration 12 ? 0 : Math.ceil((duration - 12) / 12); fees.set(room, (fees.get(room) || 0) fee); } // 费用降序优先并列时房间号升序JSON 输出紧凑格式。 // 输出中的每个内层数组依次放房间号和总费用元素之间只保留题目要求的逗号。 // 比较器先看费用只有费用相等时才比较房间号避免并列结果顺序不确定。 const answer [...fees].sort((a, b) b[1] - a[1] || a[0] - b[0]); console.log(JSON.stringify(answer));【华为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。让他帮助你查询原因。