云计算百科
云计算领域专业知识百科平台

2026-02-12:完成一个任务的最早时间。用go语言,给你一个二维整数数组 tasks,数组中每个元素 [s_i, t_i] 表示一个任务在时间点 s_i 开始,并需要 t_i 个时间单位才能结束

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 作为答案。

  • ⏱️ 复杂度分析

    • 时间复杂度:O(n)。
      其中 n 是任务的数量(tasks.length)。算法只需要遍历任务数组一次,对每个任务执行常数时间(O(1))的操作(加法、比较),因此总时间复杂度与任务数量成线性关系。

    • 空间复杂度:O(1)。
      算法只使用了固定数量的额外变量(ans, 循环变量等),没有使用与输入数据规模(如任务数量 n)成正比的额外存储空间。

    💎 总结

    这个解决方案非常直接和高效。它抓住了问题的核心——任务的完成时间是其开始时间与持续时间之和,而最早完成时间就是所有完成时间中的最小值。通过一次遍历即可找到答案,无论在时间还是空间上都是最优的。

    Go完整代码如下:

    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)
    }

    在这里插入图片描述

    Python完整代码如下:

    # -*-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()

    在这里插入图片描述

    C++完整代码如下:

    #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;
    return 0;
    }

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 2026-02-12:完成一个任务的最早时间。用go语言,给你一个二维整数数组 tasks,数组中每个元素 [s_i, t_i] 表示一个任务在时间点 s_i 开始,并需要 t_i 个时间单位才能结束
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!