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

Pythonですべての映画を上映するために必要な映画館の最小数を見つけるためのプログラム


さまざまな映画の上映の間隔のリストがあるとすると(それらは重複する可能性があります)、すべての映画を上映できるようにするために必要な劇場の最小数を見つける必要があります。

したがって、入力がintervals =[[20、65]、[0、40]、[50、140]]のような場合、[20、65]と[0、40]が重なっているため、出力は2になります。 。 [20、65]と[50、140]も重複していますが、[0、40]と[50、140]は重複していません。したがって、2つの劇場が必要です。

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

  • t:=新しいリスト
  • 間隔[a、b]ごとに、間隔を指定して
    • tの最後に[a、1]を挿入します
    • tの最後に[b、-1]を挿入します
  • ans:=0、count:=0
  • ソートされた形式のtの各ペア(x、d)について、
    • count:=count + d
    • ans:=ansとカウントの最大値
  • 回答を返す

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

サンプルコード

class Solution:
   def solve(self, intervals):
      t = []
      for a, b in intervals:
         t.append((a, 1))
         t.append((b, -1))
         ans = count = 0
         for x, d in sorted(t):
            count += d
            ans = max(ans, count)
         return ans

ob = Solution()
intervals = [[20, 65],[0, 40],[50, 140]]
print(ob.solve(intervals))

入力

[[20, 65],[0, 40],[50, 140]]

出力

2

  1. Pythonですべてのポイントを接続するための最小コストを見つけるためのプログラム

    (x、y)の形式のいくつかの点を持つpointsという配列があるとします。ここで、2つのポイント(xi、yi)と(xj、yj)を接続するコストは、それらの間のマンハッタン距離であり、式は| xi--xj|です。 + | yi--yj|。すべてのポイントを接続するための最小コストを見つける必要があります。 したがって、ここでの合計距離は(6 + 5 + 3 + 8)=22です。 これを解決するには、次の手順に従います- points_set:=範囲0からポイントのサイズ-1までの数値を保持する新しいセット ヒープ:=ペア(0、0)でヒープを作成します visited_node:

  2. Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム

    n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=