002 任务总执行时长

002 任务总执行时长

题目描述

任务编排服务负责对任务精选组合调度。参与编排的任务有两种类型,其中一种任务执行时长为taskA,另一种执行时长为taskB。任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。

请编写一个方法,生成每次编排后的任务所有可能的总执行时长。

输入描述

一行输入三个数字,第一个数字表示第一种任务taskA的执行时长,第二个数字表示第二种任务taskB的执行时长,第三个数字表示要编排的任务个数num,并以逗号分隔。

输出描述

数组形式返回所有总执行时长,需要按从小到大排列。

示例描述

示例一

输入

1,2,3

输出:

3, 4, 5, 6

说明: 一共有4次任务编排的总时长,分别是3、4、5、6,其中:

可以执行3次taskA,得到结果3

可以执行2次taskA和1次taskB,得到结果4

可以执行1次taskA和2次taskB,得到结果5

可以执行3次taskB,得到结果6

解题思路

分别从输入字符串中读取taskA和taskB的执行时长、要编排的任务个数num。

观察输出可知,可用循环依次递减计算taskA的执行次数的时长,并加上依次递增的taskB的执行次数的时长,可得到单次计算时长的关系式:

total_time = i ⋅ taskA + ( num − i ) ⋅ taskB \text{total\_time} = i \cdot \text{taskA} + (\text{num} - i) \cdot \text{taskB} total_time=i⋅taskA+(num−i)⋅taskB

python去写就是

python 复制代码
total_time = i * taskA + (num - i) * taskB

将单次时长存放到数组中,由于需要去重和排序,可将数组用set进行去重,并使用sorted进行排序,得到结果。

解题代码

bash 复制代码
def solve_method(string):
    str_list = string.split(",")
    taskA = int(str_list[0])
    taskB = int(str_list[1])
    num = int(str_list[2])

    result = []
    for i in range(num + 1):
        total_time = i * taskA + (num - i) * taskB
        result.append(total_time)

    return sorted(list(set(result)))


if __name__ == '__main__':
    assert solve_method("1,2,3") == [3, 4, 5, 6]
相关推荐
我的xiaodoujiao7 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 38--Allure 测试报告
python·学习·测试工具·pytest
燃于AC之乐1 小时前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
沈浩(种子思维作者)6 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
MM_MS7 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E7 小时前
【二分法】寻找峰值
算法
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
io_T_T7 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
mit6.8247 小时前
位运算|拆分贪心
算法
华研前沿标杆游学7 小时前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然8 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析