题目地址:
https://leetcode.com/problems/task-scheduler-ii/description/
给定一个数组 a a a, a [ i ] a[i] a[i]表示第 i i i个任务的种类。再给定一个正整数 s s s,表示做完某类任务之后要休息 s s s天才能再做相同任务。每个任务 1 1 1天就能做完并且每天只能做 1 1 1个任务,并且任务要按照顺序做。问最少要多少天可以使得所有任务都做完。
显然每天如果能做任务,就要尽量做任务。代码如下:
class Solution {
public:
using ll = long long;
ll taskSchedulerII(vector<int>& tasks, int space) {
ll cur_day = 0;
unordered_map<int, ll> mp;
for (int i = 0; i < tasks.size(); i++) {
int x = tasks[i];
if (!mp.count(x)) mp[x] = ++cur_day;
else {
ll prev_day = mp[x];
// cur_day是做完上一个任务是哪天,prev_day是上次做x任务是哪天
mp[x] = max(cur_day + 1, prev_day + space + 1);
cur_day = mp[x];
}
}
return cur_day;
}
};
时空复杂度 O ( n ) O(n) O(n)。