用 Python 编写程序,查找观看次数最多的 K 个节目的总时长

pythonserver side programmingprogramming更新于 2025/12/18 4:28:17

假设我们有一个列表,列表由名为 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。

为了解决这个问题,我们将遵循以下步骤 −

  • 如果 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

  • while i < k, do

    • 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

相关文章


有用资源