
2026-02-12:完成一个任务的最早时间。用go语言,给你一个二维整数数组 tasks,数组中每个元素 [s_i, t_i] 表示一个任务在时间点 s_i 开始,并需要 t_i 个时间单位才能结束。
请找出一个最小的时间点,使得在该时刻或之前至少有一个任务已经完成。
换句话说,求能首次出现任务完成的最早时间。
1 <= tasks.length <= 100。
tasks[i] = [si, ti]。
1 <= si, ti <= 100。
输入: tasks = [[1,6],[2,3]]。
输出: 5。
解释:
第一个任务从时间 t = 1 开始,并在 1 + 6 = 7 时完成。第二个任务在时间 t = 2 开始,并在 2 + 3 = 5 时完成。因此,最早完成的任务在时间 5。
题目来自力扣3683。
ans 初始化为一个非常大的整数(math.MaxInt),确保任何任务的完成时间都会比这个初始值小,从而能被正确更新。tasks 中的每一个任务。对于当前任务 t,它包含两个元素:t[0] 是开始时间 s_i,t[1] 是持续时间 t_i。completionTime = t[0] + t[1]。completionTime 与当前记录的最小值 ans 进行比较。如果 completionTime 更小,则用这个更小的值更新 ans。这样,在遍历结束后,ans 保存的就是所有任务完成时间中的最小值。ans 作为答案。n 是任务的数量(tasks.length)。算法只需要遍历任务数组一次,对每个任务执行常数时间(O(1))的操作(加法、比较),因此总时间复杂度与任务数量成线性关系。ans, 循环变量等),没有使用与输入数据规模(如任务数量 n)成正比的额外存储空间。这个解决方案非常直接和高效。它抓住了问题的核心——任务的完成时间是其开始时间与持续时间之和,而最早完成时间就是所有完成时间中的最小值。通过一次遍历即可找到答案,无论在时间还是空间上都是最优的。
.
package main
import (
"fmt"
"math"
)
func earliestTime(tasks [][]int)int {
ans := math.MaxInt
for _, t := range tasks {
ans = min(ans, t[0]+t[1])
}
return ans
}
func main() {
tasks := [][]int{{1, 6}, {2, 3}}
result := earliestTime(tasks)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
from typing import List
def earliestTime(tasks: List[List[int]]) -> int:
ans = float('inf')
for t in tasks:
ans = min(ans, t[0] + t[1])
return ans
def main():
tasks = [[1, 6], [2, 3]]
result = earliestTime(tasks)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <vector>
#include <limits>
#include <algorithm>
using namespace std;
int earliestTime(vector<vector<int>>& tasks) {
int ans = numeric_limits<int>::max();
for (const auto& t : tasks) {
ans = min(ans, t[0] + t[1]);
}
return ans;
}
int main() {
vector<vector<int>> tasks = {{1, 6}, {2, 3}};
int result = earliestTime(tasks);
cout << result << endl;
return0;
}

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