
2026-03-23:完成所有送货任务的最少时间。用go语言,有两架送货无人机,对应两个长度为 2 的整数数组:
规则如下:
目标是合理安排两架无人机的工作与充电时间,使得所有送货任务全部完成,并返回所需的最短总时间(单位:小时,整数)。
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小时,同一时间只能干一件事;lcm(r1, r2)代码先算最大公约数gcd,再算最小公倍数lcm(两个数的公共充电周期):
gcd(2,3):2和3的最大公约数是1;lcm(2,3):2*3/1=6,即两架无人机每6小时会同时充电一次。总送货次数 = d1+d2 = 3+1=4次,公共充电周期lcm=6;
代入公式得合作时间:f(4,6) = 4 + (4-1)/(6-1) = 4+0=4(整数除法,3/5=0)。
代码会计算三个关键时间,最大值就是满足所有规则的最少总时间:
max(5,1,4)=5,与题目输出一致。最终时间5小时,完美符合所有规则:
gcd(欧几里得算法)、lcm、三次公式计算、取最大值;.
package main
import (
"fmt"
)
func f(d, r int)int {
return d + (d-1)/(r-1)
}
func minimumTime(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(d1+d2, l)))
}
func gcd(a, b int)int {
for a != 0 {
a, b = b%a, a
}
return b
}
func lcm(a, b int)int {
return a / gcd(a, b) * b
}
func main() {
d := []int{3, 1}
r := []int{2, 3}
result := minimumTime(d, r)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
import math
def f(d: int, r: int) -> int:
"""计算单架无人机在给定充电周期下完成 d 次送货所需的最小小时数"""
return d + (d - 1) // (r - 1)
def lcm(a: int, b: int) -> int:
"""计算最小公倍数"""
return a // math.gcd(a, b) * b
def minimum_time(d: list, r: list) -> int:
"""
计算两架无人机完成所有送货所需的最小总时间
Args:
d: 送货次数数组 [d1, d2]
r: 充电周期数组 [r1, r2]
Returns:
最小总时间(小时数)
"""
d1, d2 = d[0], d[1]
r1, r2 = r[0], r[1]
# 计算充电周期的最小公倍数
l = lcm(r1, r2)
# 取三种方案的最大值
# 1. 第一架无人机单独完成所需时间
# 2. 第二架无人机单独完成所需时间
# 3. 两架无人机以 l 为周期协同工作完成所有任务所需时间
return max(f(d1, r1), f(d2, r2), f(d1 + d2, l))
def main():
d = [3, 1]
r = [2, 3]
result = minimum_time(d, r)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int f(int d, int r) {
// 计算单架无人机在给定充电周期下完成 d 次送货所需的最小小时数
return d + (d - 1) / (r - 1);
}
int gcd(int a, int b) {
// 计算最大公约数
while (a != 0) {
int temp = a;
a = b % a;
b = temp;
}
return b;
}
int lcm(int a, int b) {
// 计算最小公倍数
return a / gcd(a, b) * b;
}
long long minimumTime(vector<int>& d, vector<int>& r) {
int d1 = d[0], d2 = d[1];
int r1 = r[0], r2 = r[1];
// 计算充电周期的最小公倍数
int l = lcm(r1, r2);
// 取三种方案的最大值
// 1. 第一架无人机单独完成所需时间
// 2. 第二架无人机单独完成所需时间
// 3. 两架无人机以 l 为周期协同工作完成所有任务所需时间
return max({f(d1, r1), f(d2, r2), f(d1 + d2, l)});
}
int main() {
vector<int> d = {3, 1};
vector<int> r = {2, 3};
long long result = minimumTime(d, r);
cout << result << endl;
return0;
}

·
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
·