You are given a list of N tasks with each task taking s seconds to execute on a single CPU.
The ith task can start executing at or after startTimes[i]. Given c CPUs, find the minimum time at which all the tasks will be executed.
这是一个典型的任务调度问题。
每个任务有两个限制:
- 不能早于自己的
startTimes[i]开始; - 同一时刻最多只能有
c个任务并行执行。
每个任务执行时间相同,都是 s 秒。
目标不是输出调度方案,而是求最早完成所有任务的时间。
核心思路
先把所有任务的最早开始时间排序。
然后按时间顺序安排任务:
- 如果当前有空闲 CPU,就立即安排任务;
- 如果所有 CPU 都忙,就等最早空出来的 CPU;
- 当前任务真正开始时间为:
max(startTimes[i], earliestAvailableCpuTime)任务完成时间为:
actualStartTime + s不断更新 CPU 的可用时间,最后所有任务完成时间中的最大值就是答案。
这类题表面是 CPU 调度,本质是“带释放时间的多机器任务分配”。Google 面试中常见变体包括不同任务耗时、任务优先级、实时新增任务等。csoahelp 可帮助候选人在真实面试中快速识别模型、组织思路并写出可运行代码。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

