Easy

题目描述

给你一个二维整数数组 tasks,其中 tasks[i] = [si, ti]

tasks 中的每个 [si, ti] 表示一个任务,该任务在时间 si 开始,需要 ti 个时间单位才能完成。

返回至少完成一个任务的最早时间。

示例 1:

输入:tasks = [[1,6],[2,3]]
输出:5
解释:
第一个任务在时间 t = 1 开始,在时间 1 + 6 = 7 完成。
第二个任务在时间 2 + 3 = 5 完成。
你可以在时间 5 完成一个任务。

示例 2:

输入:tasks = [[100,100],[100,100],[100,100]]
输出:200
解释:
所有三个任务都在时间 100 + 100 = 200 完成。

约束条件:

  • 1 <= tasks.length <= 100
  • tasks[i] = [si, ti]
  • 1 <= si, ti <= 100

解题思路

这是一道简单的数组题目,关键在于理解题意:我们需要找到所有任务中最早完成的那个任务的完成时间。

解题思路:

每个任务的完成时间等于开始时间加上持续时间,即 finish_time = start_time + duration。我们需要计算所有任务的完成时间,然后返回其中的最小值。

具体步骤:

  1. 遍历所有任务
  2. 对于每个任务 [si, ti],计算其完成时间 si + ti
  3. 维护一个最小完成时间,不断更新为更小的值
  4. 返回最小完成时间

这个问题的核心是理解任务的完成时间计算方式,以及找到多个数值中的最小值。时间复杂度为 O(n),空间复杂度为 O(1),其中 n 是任务数量。

推荐解法: 一次遍历求最小值,简洁高效。

代码实现

class Solution {
public:
    int earliestTime(vector<vector<int>>& tasks) {
        int minTime = INT_MAX;
        for (const auto& task : tasks) {
            int finishTime = task[0] + task[1];
            minTime = min(minTime, finishTime);
        }
        return minTime;
    }
};
class Solution:
    def earliestTime(self, tasks: List[List[int]]) -> int:
        return min(start + duration for start, duration in tasks)
public class Solution {
    public int EarliestTime(int[][] tasks) {
        int minTime = int.MaxValue;
        foreach (int[] task in tasks) {
            int finishTime = task[0] + task[1];
            minTime = Math.Min(minTime, finishTime);
        }
        return minTime;
    }
}
var earliestTime = function(tasks) {
    let minTime = Infinity;
    for (let [start, duration] of tasks) {
        let finishTime = start + duration;
        minTime = Math.min(minTime, finishTime);
    }
    return minTime;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n)需要遍历所有 n 个任务计算完成时间
空间复杂度O(1)只使用常数额外空间存储最小时间