Python程序:查找K个观看次数最多的节目的总时长
假设我们有一个字符串列表的列表,称为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,因为观看次数最多的两个节目是"Jokers Company"和"The BGT",总时长为18和10 + 10 = 20。
为了解决这个问题,我们将遵循以下步骤:
如果shows为空或durations为空或k为0,则
返回0
d := 一个空字典
对于范围从0到shows大小的i,执行以下操作:
d[shows[i]] := d[shows[i]] + durations[i]
l := 一个新的列表
对于d中的每个i,执行以下操作:
将d[i]插入到l的末尾
按降序对列表l进行排序
i := 0
answer := 0
当i < k时,执行以下操作:
answer := answer + l[i]
i := i + 1
返回answer
示例
让我们看看下面的实现,以便更好地理解
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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP