假设我们有一个称为task的值列表,其中每个不同的值代表一个不同的任务类型,并且我们还有一个非负整数k。每个任务都需要一分钟才能完成,但是我们必须在完成两个相同类型的任务之间等待k分钟。在任何时候,我们都可以做任务或等待。我们必须找到完成所有任务所需的最少时间。
因此,如果输入像nums = [2、2、2、3、3、2],k = 1,则输出将是7,因为最佳排序是[2、3、2、3、2,等待,2]。
为了解决这个问题,我们将遵循以下步骤-
c:=所有数值的计数
ans:= 0,lastsize:= 0
当c为非零时,
c [x]:= c [x] − 1
删除c [x]
如果c [x]等于0,则
lastsize:= c的大小
对于c的最常见(k + 1)个值中的每个值x,
ans:= ans + k + 1
返回ans + lastsize-(k + 1)
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums, k): from collections import Counter c = Counter(nums) ans = 0 lastsize = 0 while c: lastsize = len(c) for x, _ in c.most_common(k + 1): c[x] -= 1 if c[x] == 0: del c[x] ans += k + 1 return ans + lastsize - (k + 1) ob1 = Solution()nums = [2, 2, 2, 3, 3, 2] k = 1 print(ob1.solve(nums, k))
[2, 2, 2, 3, 3, 2], 1
输出结果
7