小M负责管理快递中转站,在接下来的n天里,每天到达的快递需要及时送达。她可以使用载重量为k的运输车完成任务。每天的快递可以拆分成任意重量,并且需要在当天或第二天之前送达。任务是计算完成所有快递运输所需的最少出车次数。 例如,有3天的快递到达量分别为3、2、1,运输车的载重量为2。小M第一天可以送走2单位重量,留下1单位重量的快递;第二天到达2单位快递,加上之前剩下的1单位,总共3单位,则需要出车两次:先送走2单位,再送走剩下的1单位。总共需要出车3次。
-
初始化变量:
- 首先初始化变量
left_weight为 0,用于记录每天结束后剩余未运输的快递重量,初始时没有剩余重量,所以设为 0。然后初始化变量total_trips为 0,用于记录完成所有快递运输任务总共需要出车的次数,初始值也设为 0。
- 首先初始化变量
-
遍历每一天计算出车次数和剩余重量:
-
通过一个循环遍历
n天(索引i从 0 到n - 1),对于每一天i,进行以下操作:- 计算当天及前一天剩余的快递总重量
current_weight,它等于当天到达的快递重量a[i]加上之前剩余未运输的快递重量left_weight,即current_weight = a[i] + left_weight。 - 计算当天需要出车的次数
trips,通过将当天及前一天剩余的快递总重量current_weight除以运输车的载重量k并向下取整得到(trips = current_weight // k),这表示按照载重量k来运输,需要出车的完整次数。 - 接着判断当天及前一天剩余的快递总重量
current_weight是否能被载重量k整除,如果不能整除(通过current_weight % k!= 0判断),说明还有剩余的快递重量需要再出一次车来运输,此时将出车次数trips加 1。 - 将当天的出车次数
trips累加到总共出车次数total_trips中(total_trips += trips),以更新总的出车次数统计。 - 计算当天运输完后剩余未运输的快递重量
left_weight,通过用当天及前一天剩余的快递总重量current_weight减去当天出车运输走的总重量(出车次数trips乘以载重量k)得到,即left_weight = current_weight - trips * k,用于下一天的计算,作为下一天的初始剩余重量。
- 计算当天及前一天剩余的快递总重量
-
-
返回最终结果:
-
当循环遍历完所有
n天之后,total_trips变量中存储的就是完成所有快递运输所需的最少出车次数,将其返回即可。
-
时间复杂度方面,循环遍历 n 天的时间复杂度为 (n 为天数),在循环中进行的操作主要是简单的算术运算和比较操作,时间复杂度都为常数级别,所以整体时间复杂度为 ,在处理常规数量的天数、快递到达量以及运输车载重量时能够较快地计算出最少出车次数。