2026-02-12:完成一个任务的最早时间。用go语言,给你一个二维整数数组 tasks,数组中每个元素 [s_i, t_i] 表示一个任务在时间点 s_i

0 阅读3分钟

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。

🔢 计算过程分步解析

  1. 初始化答案变量
    程序首先将 ans 初始化为一个非常大的整数(math.MaxInt),确保任何任务的完成时间都会比这个初始值小,从而能被正确更新。

  2. 遍历任务数组
    代码通过循环依次处理 tasks 中的每一个任务。对于当前任务 t,它包含两个元素:t[0] 是开始时间 s_it[1] 是持续时间 t_i

  3. 计算单个任务的完成时间
    对于每个任务,计算其完成时间:completionTime = t[0] + t[1]

  4. 更新最早完成时间
    将计算出的 completionTime 与当前记录的最小值 ans 进行比较。如果 completionTime 更小,则用这个更小的值更新 ans。这样,在遍历结束后,ans 保存的就是所有任务完成时间中的最小值。

  5. 返回结果
    循环结束后,直接返回 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;
}

在这里插入图片描述