Pythonで配列を補完するための最小限の動きを見つけるプログラム
別の値の制限である偶数の長さの配列numがあるとします。 1回の移動で、numsの任意の値を1からlimitまでの別の値に置き換えることができます。すべてのインデックスiについて、nums [i] + nums [n-1-i]が同じ数に等しい場合、配列は相補的であると言われます。したがって、numsを補完するために必要な最小移動数を見つける必要があります。
したがって、入力がnums =[1,4,2,3] limit =4のような場合、出力は1になります。これは、1回の移動でインデックス1から2の要素を作成できるため、配列は[1,2 、2,3]、次にnums [0] + nums [3] =4、nums [1] + nums [2] =4、nums [2] + nums [1] =4、nums [3] + nums [ 0] =4
これを解決するには、次の手順に従います-
- n:=numsのサイズ
- mid:=n/2の商
- zero_moves:=整数型の値の空のマップ
- start:=サイズの配列(2*制限+1)、0で埋める
- end:=サイズの配列(2*制限+1)、0で埋める
- res:=無限大
- 0からmid-1の範囲のiの場合、do
- x:=nums [i]
- y:=nums [n --1 --i]
- zero_moves [x + y]:=zero_moves [x + y] + 1
- start [1 +最小のx、y]を1増やします
- end [limit + maximum of x、y]を1増やします
- 間隔:=0
- 範囲2から制限*2のターゲットについては、
- 間隔:=間隔+開始[ターゲット]
- コスト:=2 *(中間-間隔)+間隔-zero_moves[ターゲット]
- res:=最小のresとコスト
- 間隔:=間隔-end [target]
- return res
例
理解を深めるために、次の実装を見てみましょう-
from collections import defaultdict def solve(nums, limit): n = len(nums) mid = n // 2 zero_moves = defaultdict(int) start = [0] * (2 * limit + 1) end = [0] * (2 * limit + 1) res = float('inf') for i in range(mid): x = nums[i] y = nums[n - 1 - i] zero_moves[x + y] += 1 start[min(x, y) + 1] += 1 end[max(x, y) + limit] += 1 intervals = 0 for target in range(2, limit * 2 + 1): intervals += start[target] cost = 2 * (mid - intervals) + intervals - zero_moves[target] res = min(res, cost) intervals -= end[target] return res nums = [1,4,2,3] limit = 4 print(solve(nums, limit))
入力
[1,4,2,3], 4
出力
1
-
Pythonプログラムで配列の合計を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n): # using built-in function return(sum(arr)) # main arr = [11,22,33,44,55,66
-
配列の合計を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '