Loading... > https://leetcode.cn/problems/minimum-rounds-to-complete-all-tasks/description/?envType=daily-question&envId=2024-05-02 思路很好想的一道中等题,贪心即可。 使用哈希表统计每个任务的个数,然后判断即可。假设一种难度的任务数为 $i$ ,则有以下四种情况: 1. $i = 1$ :无法完成,直接返回 -1 即可。 2. $i \% 3 = 0$ :需要 $i / 3$ 轮 3 个任务就可以做完。 3. $i \% 3 = 1$ :需要 $\lfloor i / 3 \rfloor - 1$ 轮 3 个任务,再加上 2 轮 2个任务即可。 4. $i \% 3 == 2$ :需要 $\lfloor i / 3 \rfloor$ 轮 3 个任务,再加上 1 轮 2个任务即可。 ```c++ class Solution { public: int minimumRounds(std::vector<int>& tasks) { std::unordered_map<int, int> difficulty; for (auto &task : tasks) difficulty[task] += 1; int res = 0; for (auto &e : difficulty) { if (e.second == 1) return -1; res += e.second / 3 + (e.second % 3 != 0); } return res; } }; ``` - 时间复杂度:$O(n)$ ,其中 $n$ 为 `task` 数组的长度。 - 空间复杂度:$O(k)$ ,其中 $k$ 为任务的种类数。 最后修改:2024 年 05 月 14 日 © 允许规范转载 赞 1 如果觉得我的文章对你有用,请随意赞赏