Giả sử chúng ta có một danh sách danh sách các chuỗi được gọi là chương trình, cũng có một danh sách các số nguyên được gọi là thời lượng và một giá trị khác k, ở đây hiển thị [i] và thời lượng [i] đại diện cho một chương trình và thời lượng của nó được người thứ i xem, chúng ta có để tìm tổng thời lượng đã xem của k chương trình được xem nhiều nhất.
Vì vậy, nếu đầu vào giống như shows =["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"] durations =[10, 8, 10, 18, 9] k =2, thì đầu ra sẽ là 38, vì 2 chương trình được xem nhiều nhất hàng đầu là "Jokers Company" và "The BGT" và tổng thời lượng là 18 và 10 + 10 =20.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
nếu chương trình trống hoặc thời lượng trống hoặc k bằng 0, thì
-
trả về 0
-
-
d:=một từ điển trống
-
đối với tôi trong phạm vi từ 0 đến kích thước của chương trình, hãy làm
-
d [hiển thị [i]]:=d [hiển thị [i]] + thời lượng [i]
-
-
l:=một danh sách mới
-
cho mỗi tôi trong d, làm
-
chèn d [i] vào cuối l
-
-
sắp xếp danh sách theo thứ tự ngược lại
-
i:=0
-
answer:=0
-
trong khi tôi
-
answer:=answer + l [i]
-
i:=i + 1
-
-
trả lại câu trả lời
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn
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))
Đầu vào
["The BGT", "Jack jumper", "The BGT", "Jokers Company", "Music magic"], [10, 8, 10, 18, 9], 2
Đầu ra
38