Pythonですべての1をグループ化するために必要なスワップの数をカウントするプログラム
バイナリ文字列があり、任意の2ビットを交換できるとします。すべての1をグループ化するために必要なスワップの最小数を見つける必要があります。
したがって、入力がs ="0111001"の場合、次のスワップを実行できるため、出力は1になります:0111001->1111000。
これを解決するには、次の手順に従います-
- data:=指定されたバイナリ文字列からの0と1のリスト
- 1つ設定:=0、n:=データ配列の長さ
- サイズnの配列の合計を作成し、これを0で埋め、summ [0]:=data [0] を設定します。
- one:=one + data [0]
- 1からn–1の範囲のiの場合
- summ [i]:=summ [i-1] + data [i]
- one:=one + data [i]
- ans:=one
- 左:=0、右:=1 – 1
- 正しい間
- 左が0の場合、temp:=summ [right]、それ以外の場合、temp:=summ [right] – summ [left-1]
- ans:=最小ans、1 – temp
- 左右を1つ増やします
例(Python)
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def solve(self, s): data = list(map(int, list(s))) one = 0 n = len(data) summ=[0 for i in range(n)] summ[0] = data[0] one += data[0] for i in range(1,n): summ[i] += summ[i-1]+data[i] one += data[i] ans = one left = 0 right = one-1 while right <n: if left == 0: temp = summ[right] else: temp = summ[right] - summ[left-1] ans = min(ans,one-temp) right+=1 left+=1 return ans ob = Solution() s = "0111001" print(ob.solve(s))
入力
"0111001"
出力
1
-
Pythonですべての1をグループ化するための最小スワップ
バイナリ配列データがあるとすると、配列に格納されているすべての1を配列内の任意の場所にグループ化するために必要なスワップの最小数を見つける必要があります。したがって、配列が[1,0,1,0,1,0,0,1,1,0,1]のような場合、可能な解決策は[0,0,0,0、 0,1,1,1,1,1,1] これを解決するには、次の手順に従います- 1つ設定:=0、n:=データ配列の長さ サイズnの配列の合計を作成し、これを0で埋め、summ [0]:=data [0]を設定します。 one:=one + data [0] 1からn–1の範囲のiの場合 summ [i]:=summ [i-1]
-
1からnまでのすべての数の合計セットビットをカウントするPythonプログラム。
正の整数nが与えられると、その2進表現に変更し、設定されたビットの総数をカウントします。 例 Input : n=3 Output : 4 アルゴリズム Step 1: Input a positive integer data. Step 2: then convert it to binary form. Step 3: initialize the variable s = 0. Step 4: traverse every element and add. Step 5: display sum. サンプルコード # Python program to count set bits #