Pythonで変更した後に最大のバイナリ文字列を見つけるプログラム
バイナリ文字列があるとします。次の各操作は何度でも適用できます-
-
番号に部分文字列「00」が含まれている場合は、「10」に置き換えることができます。
-
番号に部分文字列「10」が含まれている場合は、「01」に置き換えることができます。
次に、任意の数の操作の後に取得できる最大のバイナリ(数値に基づく)文字列を見つける必要があります。
したがって、入力がs ="001100"の場合、出力は111011になります。これは、(00)1100-> 101(10)0-> 1010(10)-> 10(10)01-のように転送できるためです。> 100(10)1-> 1(00)011->111011。
これを解決するには、次の手順に従います-
- 長さ:=sのサイズ
- ゼロ:=sの0の数
- ゼロが2未満の場合、
- return s
- s:=sの左側からすべての「1」を削除します
- Leading_ones:=長さ-sのサイズ
- Leading_ones:=Leading_ones+ゼロ-1
- trailing_ones:=length --leading_ones-1
- answer_left:=leading_onesの1の数
- answer_right:=1trailing_onesの1の数
- answer_left concatenate 0 concatenate answer_right and return
例
理解を深めるために、次の実装を見てみましょう-
def solve(s): length = len(s) zeros = s.count('0') if zeros < 2: return s s = s.lstrip('1') leading_ones = length - len(s) leading_ones += zeros - 1 trailing_ones = length - leading_ones - 1 answer_left = '1' * leading_ones answer_right = '1' * trailing_ones return ''.join([answer_left, '0', answer_right]) s = "001100" print(solve(s))
入力
"001100"
出力
111011
-
Pythonで最大の建物の高さを見つけるプログラム
値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ
-
Pythonで二分木の最大幅を見つけるプログラム
二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d