Pythonでは、異なるタイプのアイテムを持つKサイズのグループの最大数を見つけるプログラムが可能です。
counts [i]がタイプiのアイテムの数を表す、countsと呼ばれる数のリストがあるとします。別の値kもあります。サイズkのグループの最大数を見つける必要があります。そのため、各グループには異なるタイプのアイテムが必要です。
したがって、入力がcounts =[2、3、5、3] k =2のような場合、4つのタイプのアイテムがそれぞれa、b、c、dで表されるため、出力は6になります。 k =2の次のグループを持つことができます。ここで、すべての要素は異なるタイプです:[(c、a)、(b、a)、(c、b)、(c、b)、(d、a)、 (d、a)]。
これを解決するには、次の手順に従います-
- 関数possible()を定義します。これには、カウント、グループ、kが必要です
- 必須:=グループ* k
- 0からカウントのサイズまでの範囲のiについては、
- temp:=最小カウント[i]、グループ、および必須
- 必須:=必須-臨時雇用者
- 必要な場合は0と同じで、
- Trueを返す
- Falseを返す
- 関数solve()を定義します。これには数えられます、k
- res:=0
- l:=0
- r:=カウントに存在するすべての要素の合計
- l <=rの場合、do
- m:=l +(r --l)/2の床
- 可能であれば(counts、m、k)が真の場合、
- l:=m + 1
- res:=resとmの最大値
- それ以外の場合、
- r:=m-1
- return res
例
理解を深めるために、次の実装を見てみましょう-
def possible(counts, groups, k): required = groups * k for i in range(len(counts)): temp = min(counts[i], groups, required) required -= temp if required == 0: return True return False def solve(counts, k): res = 0 l = 0 r = sum(counts) while l <= r: m = l + (r - l) // 2 if possible(counts, m, k): l = m + 1 res = max(res, m) else: r = m - 1 return res counts = [2, 3, 5, 3] k = 2 print(solve(counts, k))
入力
[2, 3, 5, 3], 2
出力
6
-
可能なBSTの数を見つけるプログラムは、Pythonのn個の異なるノードを使用して生成できます
数nがあるとします。 [1,2、...、n]のような数がある場合、これらのn個の値を使用して形成できるBSTの数を数える必要があります。答えが大きすぎる場合は、結果を10 ^ 9+7で変更します。 したがって、入力がn =3の場合、出力は14になります。 これを解決するために、次の手順に従います a:=値が[0、1]のリスト m:=10 ^ 9 + 7 max_n:=1000 2からmax_n+1の範囲のkについては、 (1 +リストのすべての要素の合計(a [i] * a [k --i] for all i in range(1、k)))modmをaの最後に挿入します
-
Pythonの単語のリストにいくつの異なるローテーショングループがあるかを見つけるためのプログラム
すべての固有の回転を保持する文字列の回転グループがあるとします。入力が「567」の場合、これは「675」と「756」に回転でき、それらはすべて同じ回転グループにあります。文字列の単語のリストがある場合は、各単語をローテーショングループでグループ化し、グループの総数を見つける必要があります。 したがって、入力がwords =[xyz、 ab、 ba、 c、 yzx]の場合、3つの回転グループがあるため出力は3になります-[xyz、 yzx]、[ab、 ba]、[c]。 これを解決するには、次の手順に従います- s:=新しいセット ct:=0 単語のiごとに、 私がsにいない場合は、