Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最も視聴されたK番組の合計期間を見つけるプログラム


showと呼ばれる文字列のリストのリストがあり、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つの番組が「JokersCompany」と「TheBGT」であり、合計期間が18と10 + 10=20であるためです。

これを解決するには、次の手順に従います-

  • ショーが空、期間が空、またはkが0の場合、

    • 0を返す

  • d:=空の辞書

  • 0から番組のサイズまでの範囲のiについては、実行してください

    • d [shows [i]]:=d [shows [i]] + durations [i]

  • l:=新しいリスト

  • dの各iについて、実行します

    • lの最後にd[i]を挿入します

  • リストlを逆の順序で並べ替えます

  • i:=0

  • 答え:=0

  • i

    • 回答:=回答+ l [i]

    • i:=i + 1

  • 回答を返す

理解を深めるために、次の実装を見てみましょう

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

  1. Pythonを使用して循環トラックで最も訪問されたセクターを見つけるプログラム

    数nとroundsという配列があるとします。 1からnまでのラベルが付いたn個の異なるセクターで構成される円形のトラックがあります。ここで、このトラックでレースが開催されることを考えてみましょう。レースはm個の異なるラウンドで構成されています。 i番目のラウンドはセクターラウンド[i-1]で始まり、セクターラウンド[i]で終わります。たとえば、ラウンド1がセクターラウンド[0]で始まり、セクターラウンド[1]で終わる場合です。したがって、最も訪問されたセクターを昇順でソートする必要があります。 (トラック番号は、反時計回りにセクター番号の昇順です) したがって、入力がn =4ラウンド=[1,

  2. Pythonですべての出荷を完了するための総コストを見つけるためのプログラム

    ポートと呼ばれるリストのリストがあるとします。ここで、ports[i]はポートiが接続されているポートのリストを表します。また、出荷と呼ばれるリストの別のリストがあります。ここで、シーケンス[i、j]の各リストは、ポートiからポートjへの出荷要求があることを示します。また、ポートiからポートjに出荷するコストは、2つのポートからの最短経路の長さであるため、すべての出荷を完了するために必要な合計コストを見つける必要があります。 4からです。 これを解決するために、次の手順に従います- n:=ポートのサイズ dist:=ポートリストからの隣接行列 0からnの範囲のjについては、