【Python】特定の時点で交差している区間の数をカウントする方法
区間のリストと、point という値が与えられているとします。各区間 interval[i] は [si, ei] の形式で表され、区間 i の開始時刻と終了時刻(両端を含む)を意味します。このとき、指定された時点で交差している区間の個数を求める必要があります。
たとえば、入力が intervals = [[2, 6],[4, 10],[5, 9],[11, 14]]、point = 5 の場合、出力は 3 になります。これは、時刻 5 を含む区間が [2, 6]、[4, 10]、[5, 9] の 3 つ存在するためです。
解決アプローチ
この問題は、シンプルな線形探索によって解くことができます。手順は以下の通りです。
- カウンター
countを 0 で初期化します。 intervals内の各区間から、開始時刻 i と終了時刻 j を取り出します。point >= iかつpoint <= jを満たす場合、その区間は指定された時点を含んでいるため、countを 1 増やします。- すべての区間を確認した後、
countを返します。
このアルゴリズムの計算量は O(n)(n は区間の数)であり、すべての区間を一度ずつチェックするだけでよいため、非常に効率的です。
実装例
理解を深めるために、以下の Python コードを見てみましょう。
def solve(intervals, point):
count = 0
for i, j in intervals:
if point >= i and point <= j:
count += 1
return count
intervals = [[2, 6],[4, 10],[5, 9],[11, 14]]
point = 5
print(solve(intervals, point))
入力
[[2, 6],[4, 10],[5, 9],[11, 14]], 5
出力
3
このように、各区間の開始時刻と終了時刻を比較するだけで、指定した時点に交差する区間の数を簡単に求めることができます。条件判定では「以上」「以下」を使用しているため、区間の端点がちょうど point と一致する場合も正しくカウントされる点に注意してください。
-
Pythonで木の特定の辺を含む一意なパスの総数をカウントするプログラム
木構造を表す辺のリスト (u, v) が与えられます。ここで、各辺について「その辺を含む一意なパス(単純パス)」の総数を求め、入力された辺と同じ順序で結果を返す必要があります。例として、入力が edges = [[0, 1], [0, 2], [1, 3], [1, 4]] の場合を考えてみましょう。この場合、出力は [6, 4, 4, 4] となります。解き方のアプローチこの問題は、以下の手順で解くことができます。与えられた辺から隣接リスト adj を作成します。各頂点の部分木サイズを記録するためのマップ count を用意します。関数 dfs(x, parent) を定義します。count
-
セットを使って文字列内の母音の数をカウントするPythonプログラム
本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe