Posted on 2023-01-04 18:19
Uriel 阅读(38)
评论(0) 编辑 收藏 引用 所属分类:
贪心 、
闲来无事重切Leet Code
给定一堆task的难度值,每次可以完成2个或者3个难度一样的task,问一共多少次可以完成所有task,贪心
先统计每一种难度值的出现次数,分以下几种情况
1. 只出现一次,那么这个task无法被单独完成,直接return -1
2. 出现mod 3=0次,那么每次完成3个此类task
3. 出现mod 3=1次,那么每次完成3个此类task,最后剩4个此类task每次完成2个
4. 出现mod 3=2次,那么每次完成3个此类task,最后剩2个此类task一次完成
1 #944
2 #Runtime: 2137 ms (Beats 43.75%)
3 #Memory: 26.8 MB (Beats 39.58%)
4
5 class Solution(object):
6 def minimumRounds(self, tasks):
7 """
8 :type tasks: List[int]
9 :rtype: int
10 """
11 cnt = Counter(tasks)
12 ans = 0
13 for i in cnt:
14 if cnt[i] == 1:
15 return -1
16 if cnt[i] % 3 == 0:
17 ans += cnt[i] / 3
18 elif cnt[i] % 3 == 1:
19 ans += 2 + (cnt[i] - 4) / 3
20 elif cnt[i] % 3 == 2:
21 ans += 1 + (cnt[i] - 2) / 3
22 return ans