华为OD机试 - 最短耗时(Python)| 代码编写思路+核心知识点

这是一篇关于华为OD机试中的一道题目,涉及任务调度问题。给定一个任务列表,每个任务有特定类型,相同类型任务间需间隔N个时间单位冷却。文章介绍了题意、输入输出格式,并提供了解题思路和Python代码实现,通过统计任务次数和利用特定公式计算最短执行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最短耗时

题目

给定一个正整型数组表示待系统执行的任务列表,
数组的每一个元素代表一个任务,元素的值表示该任务的类型。
请计算执行完所有任务所需的最短时间。
任务执行规则如下:

  1. 任务可以按任意顺序执行,且每个任务执行耗时间均为 1 个时间单位。
  2. 两个同类型的任务之间必须有长度为 N 个单位的冷却时间,
    比如: N2 时,在时间 K 执行了类型 3 的任务,
    那么 K+1K+2 两个时间不能执行类型 3 任务。
  3. 系统在任何一个单位时间内都可以执行一个任务,或者等待状态。
    说明:数组最大长度为 1000 数组最大值 1000

输入

第一行记录一个用 半角逗号 分隔的数组,
数组长度不超过 1000,数组元素的值不超过 1000
第二行记录任务冷却时间,N 为正整数, N <= 100

输出

输出为执行完所有任务所需的最短时间。

示例一

输入

2,2,2,3
2

输出

7

解题思路

该题实现了一个任务调度的逻辑,其中任务列表为 tasks,n 表示两个相同任务之间的冷却时间。代码的主要逻辑是先统计出现次数最多的任务数 max_count,然后计算出最短时间 ans,最后再加上出现次数等于 max_count 的任务数。其中最短时间的计算公式为(ans = (max_count - 1) * (n + 1)),这个公式的意思是将出现次数最多的任务作为框架,然后在框架中间插入其他任务,每个框架的长度为 n+1,最后再加上出现次数等于 max_count 的任务数。

核心知识点

  • 字典
  • 列表排序

Python 代码实现

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值