मान लीजिए हमारे पास tasks नामक मानों की एक सूची है जहां प्रत्येक अलग मान एक अलग टास्क प्रकार को दर्शाता है, और हमारे पास एक गैर-नकारात्मक पूर्णांक k भी है। प्रत्येक टास्क को पूरा होने में एक मिनट लगता है, लेकिन हमें एक ही प्रकार के दो टास्क करने के बीच k मिनट इंतजार करना होगा। किसी भी समय, हम एक टास्क कर सकते हैं या इंतजार कर सकते हैं। हमें सभी टास्क को पूरा करने में लगने वाले सबसे कम समय का पता लगाना है।
तो, यदि इनपुट nums = [2, 2, 2, 3, 3, 2], k = 1 जैसा है, तो आउटपुट 7 होगा, क्योंकि इष्टतम क्रम [2, 3, 2, 3, 2, WAITING, 2] है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- c := nums में सभी मानों की गिनती
- ans := 0, lastsize := 0
- जब तक c नॉन-ज़ीरो है, करें
- lastsize := c का आकार
- c के सबसे सामान्य (k + 1) मानों में प्रत्येक मान x के लिए, करें
- c[x] := c[x] - 1
- यदि c[x], 0 के समान है, तो c[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