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

Pythonの他の間隔内に完全に含まれている間隔の数をカウントするプログラム


間隔のリストがあるとします。このリストでは、interval [i]には[start、end]の値があります。間隔の数が別の間隔に含まれていることを確認する必要があります。 1回だけカウントする必要がある他の複数の間隔に含まれる間隔がある場合。区間[s0、e0]は、s0≤s1かつe0≥e1の場合、別の区間[s1、e1]の内側にあります。

したがって、入力がintervals =[[2、6]、[3、4]、[4、7]、[5、5]]のような場合、[3、4]と[ 5、5]はそれぞれ[2、6]と[4、7]の中にあります。

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

  • 間隔リストが空の場合、
    • 0を返す
  • 開始時刻に基づいて間隔リストを並べ替えます。開始時刻が同じ場合は、終了時刻の降順で並べ替えます
  • end_mx:=-infinity
  • ans:=0
  • 間隔を置いて(開始、終了)ペアごとに、
    • end <=end_mxの場合、
      • ans:=ans + 1
    • end_mx:=end_mxとendの最大値
  • 回答を返す

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

def solve(intervals):
   if not intervals:
      return 0

   intervals.sort(key=lambda x: (x[0], -x[1]))

   end_mx = float("-inf")
   ans = 0

   for start, end in intervals:
      if end <= end_mx:
         ans += 1

      end_mx = max(end_mx, end)

   return ans

intervals = [[2, 6],[3, 4],[4, 7],[5, 5]]
print(solve(intervals))

入力

[[2, 6],[3, 4],[4, 7],[5, 5]]

出力

2

  1. PythonでnノードのBSTの数をカウントするプログラム

    n個の異なるノードがあるとします。すべてが異なります。二分探索木を形成するためにそれらを配置できる方法の数を見つける必要があります。二分探索木で知っているように、左側のサブツリーは常に小さい値を保持し、右側のサブツリーは大きい値を保持します。 これを解決するために、カタラン数を見つけます。カタラン数C(n)は、n個の異なるキーを持つ二分探索木を表します。式は次のようになります $$ C(n)=\ frac {(2n)!} {(n + 1)!\ times n!} $$ したがって、入力がn =3の場合、出力は5になります。 これを解決するには、次の手順に従います- 関数ncr

  2. Pythonで特定のエッジを含む一意のパスの数をカウントするプログラム

    (u、v)の形式のエッジのリストがあり、これらがツリーを表しているとします。エッジごとに、入力で指定されたのと同じ順序で、そのエッジを含む一意のパスの総数を見つける必要があります。 したがって、入力がエッジのような場合=[[0、1]、[0、2]、[1、3]、[1、4]] その場合、出力は[6、4、4、4]になります。 これを解決するには、次の手順に従います- adj:=指定されたエッジからの隣接リスト count:=空のマップ 関数dfs()を定義します。これにはx、親が必要です count [x]:=1 adj [x]のnbごとに、実行 n