文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个下标从 0 开始的整数数组 tasks ,其中 tasks[i]
表示任务的难度级别。
在每一轮中,你可以完成 2 个或者 3 个 相同难度级别 的任务。
返回完成所有任务需要的 最少 轮数,如果无法完成所有任务,返回 -1 。
示例 1:
输入:tasks = [2,2,3,3,2,4,4,4,4,4]
输出:4
解释:要想完成所有任务,一个可能的计划是:
- 第一轮,完成难度级别为 2 的 3 个任务。
- 第二轮,完成难度级别为 3 的 2 个任务。
- 第三轮,完成难度级别为 4 的 3 个任务。
- 第四轮,完成难度级别为 4 的 2 个任务。
可以证明,无法在少于 4 轮的情况下完成所有任务,所以答案为 4 。示例 2:
输入:tasks = [2,3,3]
输出:-1
解释:难度级别为 2 的任务只有 1 个,但每一轮执行中,只能选择完成 2 个或者 3 个相同难度级别的任务。因此,无法完成所有任务,答案为 -1 。提示:
1 <= tasks.length <= 10^5
1 <= tasks[i] <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-rounds-to-complete-all-tasks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 计数不同难度的数字的个数
- 对每个数量进行考虑:1不能完成,其他的数字对 3 进行求余
- 余数是0,直接每次3个,余数是1,先用两个2,剩余的每次3个,余数是2,先用一个2,剩余的每次3个
from collections import Counter
class Solution:def minimumRounds(self, tasks: List[int]) -> int:d = dict(Counter(tasks))nums = d.values()if 1 in nums:return -1ans = 0for num in nums:if num%3 == 0:ans += num//3elif num%3 == 1:ans += 2+(num-4)//3elif num%3 == 2:ans += 1+(num-2)//3return ans
112 ms 30.8 MB Python3
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!