मान लीजिए हमारे पास स्ट्रिंग्स की लिस्ट की लिस्ट shows है, एक इंटीजर्स की लिस्ट durations है, और एक और मान k है, यहां shows[i] और durations[i] iवें व्यक्ति द्वारा देखे गए शो और उसकी अवधि को दर्शाते हैं, हमें k सबसे अधिक देखे गए शो की कुल अवधि ढूंढनी है।
उदाहरण के लिए, यदि इनपुट है shows = ["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"], durations = [10, 8, 10, 18, 9], k = 2, तो आउटपुट होगा 38, क्योंकि टॉप 2 सबसे अधिक देखे गए शो हैं "Jokers Company" और "The BGT" और कुल अवधि 18 और 10 + 10 = 20 है।
समाधान दृष्टिकोण
प्रत्येक शो की कुल अवधि जोड़ने के लिए एक डिक्शनरी का उपयोग करें, फिर मानों को अवरोही क्रम में सॉर्ट करें और टॉप k का योग करें।
- यदि
showsयाdurationsखाली है याk=0, तो 0 लौटाएं। defaultdict(int)का उपयोग करके प्रत्येक शो की अवधि जमा करें।- मानों को एक लिस्ट में निकालें, रिवर्स सॉर्ट करें।
- पहले
kमानों का योग करें।
पायथन कार्यान्वयन
from collections import defaultdict
def solve(shows, durations, k):
if not shows or not durations or not k:
return 0
d = defaultdict(int)
for i in range(len(shows)):
d[shows[i]] += durations[i]
l = []
for i in d:
l.append(d[i])
l.sort(reverse=True)
i = 0
answer = 0
while i < k:
answer += l[i]
i += 1
return answer
shows = ["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"]
durations = [10, 8, 10, 18, 9]
k = 2
print(solve(shows, durations, k))
इनपुट
["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"], [10, 8, 10, 18, 9], 2
आउटपुट
38