快递中转站 |豆包MarsCode AI刷题

59 阅读3分钟

小M负责管理快递中转站,在接下来的n天里,每天到达的快递需要及时送达。她可以使用载重量为k的运输车完成任务。每天的快递可以拆分成任意重量,并且需要在当天或第二天之前送达。任务是计算完成所有快递运输所需的最少出车次数。 例如,有3天的快递到达量分别为3、2、1,运输车的载重量为2。小M第一天可以送走2单位重量,留下1单位重量的快递;第二天到达2单位快递,加上之前剩下的1单位,总共3单位,则需要出车两次:先送走2单位,再送走剩下的1单位。总共需要出车3次。

  1. 初始化变量

    • 首先初始化变量 left_weight 为 0,用于记录每天结束后剩余未运输的快递重量,初始时没有剩余重量,所以设为 0。然后初始化变量 total_trips 为 0,用于记录完成所有快递运输任务总共需要出车的次数,初始值也设为 0。
  2. 遍历每一天计算出车次数和剩余重量

    • 通过一个循环遍历 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,用于下一天的计算,作为下一天的初始剩余重量。
  3. 返回最终结果

    • 当循环遍历完所有 n 天之后,total_trips 变量中存储的就是完成所有快递运输所需的最少出车次数,将其返回即可。

时间复杂度方面,循环遍历 n 天的时间复杂度为 (n 为天数),在循环中进行的操作主要是简单的算术运算和比较操作,时间复杂度都为常数级别,所以整体时间复杂度为 ,在处理常规数量的天数、快递到达量以及运输车载重量时能够较快地计算出最少出车次数。