2026-03-23:完成所有送货任务的最少时间。用go语言,有两架送货无人机,对应两个长度为 2 的整数数组: - d = [d1, d2]:表示第 1 架和第 2 架无人机各自需要完成的送货次数

发布时间:2026/7/5 14:19:41

2026-03-23:完成所有送货任务的最少时间。用go语言,有两架送货无人机,对应两个长度为 2 的整数数组: - d = [d1, d2]:表示第 1 架和第 2 架无人机各自需要完成的送货次数 2026-03-23完成所有送货任务的最少时间。用go语言有两架送货无人机对应两个长度为 2 的整数数组d [d1, d2]表示第 1 架和第 2 架无人机各自需要完成的送货次数r [r1, r2]表示第 1 架和第 2 架无人机的充电周期规则如下每次送货固定耗时 1 小时在同一时间内最多只能有一架无人机执行送货任务无人机 i 在时间为 ri 的倍数时必须进行充电充电期间不能送货目标是合理安排两架无人机的工作与充电时间使得所有送货任务全部完成并返回所需的最短总时间单位小时整数。d [d1, d2]。1 di 1000000000。r [r1, r2]。2 ri 3 * 10000。输入: d [3,1], r [2,3]。输出: 5。解释:第一架无人机在第 1、3、5 小时送货在第 2、4 小时充电。第二架无人机在第 2 小时送货在第 3 小时充电。题目来自力扣3733。代码解题过程第一步理解核心公式f(d, r)的含义函数f(d, r) d (d-1)/(r-1)整数除法是单架无人机独立完成任务的最短时间。单架无人机规则每r小时必须充电1小时每次送货1小时同一时间只能干一件事公式含义总时间 送货总耗时 充电总耗时举例验证第一架无人机d13次r12小时充电一次送货3次耗时3小时充电次数(3-1)/(2-1)2次总时间325小时第二架无人机d21次r23小时充电一次送货1次耗时1小时充电次数(1-1)/(3-1)0次总时间101小时。第二步计算两架无人机充电周期的最小公倍数lcm(r1, r2)代码先算最大公约数gcd再算最小公倍数lcm两个数的公共充电周期计算gcd(2,3)2和3的最大公约数是1计算lcm(2,3)2*3/16即两架无人机每6小时会同时充电一次。第三步计算两架无人机合作完成总任务的最短时间总送货次数 d1d2 314次公共充电周期lcm6代入公式得合作时间f(4,6) 4 (4-1)/(6-1) 404整数除法3/50。第四步取三个时间的最大值得到最终答案代码会计算三个关键时间最大值就是满足所有规则的最少总时间第一架无人机独立时间5第二架无人机独立时间1两架无人机合作总任务时间4最大值max(5,1,4)5与题目输出一致。第五步验证时间安排匹配题目解释最终时间5小时完美符合所有规则第1小时无人机1送货第2小时无人机2送货无人机1充电第3小时无人机1送货无人机2充电第4小时无人机1充电第5小时无人机1送货✅ 完成314次送货无时间冲突无违规充电。时间复杂度与额外空间复杂度分析1. 时间复杂度核心操作gcd欧几里得算法、lcm、三次公式计算、取最大值欧几里得算法的时间复杂度为O(log(min(a,b)))是对数级极小开销其余操作都是O(1)常数时间总时间复杂度O(log(min(r1, r2)))可近似看作O(1)。2. 额外空间复杂度代码仅使用了固定数量的变量d1,d2,r1,r2,lcm等无数组、切片、动态内存分配额外空间不随输入数据规模变化总额外空间复杂度O(1)。总结解题核心先算单架无人机独立时间再算公共充电周期下的合作时间最终取最大值时间复杂度O(log(min(r1,r2)))近似常数级额外空间复杂度O(1)常数级。Go完整代码如下packagemainimport(fmt)funcf(d,rint)int{returnd(d-1)/(r-1)}funcminimumTime(d,r[]int)int64{d1,d2:d[0],d[1]r1,r2:r[0],r[1]l:lcm(r1,r2)returnint64(max(f(d1,r1),f(d2,r2),f(d1d2,l)))}funcgcd(a,bint)int{fora!0{a,bb%a,a}returnb}funclcm(a,bint)int{returna/gcd(a,b)*b}funcmain(){d:[]int{3,1}r:[]int{2,3}result:minimumTime(d,r)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-importmathdeff(d:int,r:int)-int:计算单架无人机在给定充电周期下完成 d 次送货所需的最小小时数returnd(d-1)//(r-1)deflcm(a:int,b:int)-int:计算最小公倍数returna//math.gcd(a,b)*bdefminimum_time(d:list,r:list)-int: 计算两架无人机完成所有送货所需的最小总时间 Args: d: 送货次数数组 [d1, d2] r: 充电周期数组 [r1, r2] Returns: 最小总时间小时数 d1,d2d[0],d[1]r1,r2r[0],r[1]# 计算充电周期的最小公倍数llcm(r1,r2)# 取三种方案的最大值# 1. 第一架无人机单独完成所需时间# 2. 第二架无人机单独完成所需时间# 3. 两架无人机以 l 为周期协同工作完成所有任务所需时间returnmax(f(d1,r1),f(d2,r2),f(d1d2,l))defmain():d[3,1]r[2,3]resultminimum_time(d,r)print(result)if__name____main__:main()C完整代码如下#includeiostream#includevector#includealgorithmusingnamespacestd;intf(intd,intr){// 计算单架无人机在给定充电周期下完成 d 次送货所需的最小小时数returnd(d-1)/(r-1);}intgcd(inta,intb){// 计算最大公约数while(a!0){inttempa;ab%a;btemp;}returnb;}intlcm(inta,intb){// 计算最小公倍数returna/gcd(a,b)*b;}longlongminimumTime(vectorintd,vectorintr){intd1d[0],d2d[1];intr1r[0],r2r[1];// 计算充电周期的最小公倍数intllcm(r1,r2);// 取三种方案的最大值// 1. 第一架无人机单独完成所需时间// 2. 第二架无人机单独完成所需时间// 3. 两架无人机以 l 为周期协同工作完成所有任务所需时间returnmax({f(d1,r1),f(d2,r2),f(d1d2,l)});}intmain(){vectorintd{3,1};vectorintr{2,3};longlongresultminimumTime(d,r);coutresultendl;return0;}

相关新闻