题目:
题解:
思路:模拟
- 由于题目规定了是按顺序完成所有的任务,所以不考虑限制条件的话,每完成一个任务就花费一个时间。限制考虑限制条件的话,就需要使用一个 hashmap 来记录相同类型任务上次的完成时间,若相同的任务上次被完成了,则本次任务的时间为 max(day,same[t]+space+1),之后将完成本次任务的时间更新在 hashmap 中即可。
代码如下:
using LL = long long; class Solution { public: // 由于要求相同类型的任务必须间隔 space 天,因此需要使用一个 hashmap 来记录上一次相同任务的完成时间,以便于下次遇到相同任务时,保证时间间隔最少为 space 天 long long taskSchedulerII(vector& a, int space) { unordered_map same; LL day=0; for(int x:a) { // 不考虑相同任务的时间间隔是每运行一个任务,时间+1的 day+=1; // 遇到同类型的任务,为了保证本任务能运行,与上次任务的时间至少间隔 space 天 if(same.count(x))day=max(day,same[x]+space+1); // 更新完成该任务的时间 same[x]=day; } return day; } };