Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonを使用してターゲット配列を作成するための関数呼び出しの最小数を見つけるプログラム


次の関数定義があるとします。

def modify(arr, op, index):
   if op == 0:
      arr[index] += 1
   if op == 1:
      for i in range(len(arr)):
         arr[i] *=2

同じサイズの1つのゼロ配列から特定の配列番号を作成するために必要な関数呼び出しの最小数を見つける必要がありますか?

したがって、入力がnums =[1,5,3]のような場合、最初はすべての要素が0、[0,0,0]

であるため、出力は7になります。
  • 最初のステップで2番目の要素を1増やし、配列は[0,1,0]

    になります。
  • 2番目の要素を2倍にして[0,2,0]

  • 3番目の要素を1増やして、配列が[0,2,1]

    になるようにします。
  • インデックス1から2までの要素が2つあるため、配列は[0,4,2]

  • すべての要素を1つ増やします[ここでは合計3つの操作]

したがって、合計3 + 4=7回の操作が必要です。

これを解決するには、次の手順に従います-

  • ans:=2つの要素を持つ配列はすべて0です

  • numsのnごとに、実行します

    • double:=0

    • nがゼロ以外の場合、実行

      • nが奇数の場合、

        • n:=n/2の商

        • double:=double + 1

      • それ以外の場合

        • n:=n-1

        • ans [0]:=ans [0] + 1

    • ans [1]:=最大ans[1]およびdouble

  • ansのすべての要素の合計を返す

理解を深めるために、次の実装を見てみましょう-

def solve(nums):
   ans = [0, 0]
   for n in nums:
      double = 0
      while(n):
         if not n%2:
            n = n//2
            double+=1
         else:
            n-=1
            ans[0]+=1
            ans[1] = max(ans[1], double)
   return sum(ans)
nums = [1,5,3]
print(solve(nums))

入力

[1,5,3]

出力

7

  1. 再帰関数を使用して数値のGCDを見つけるCプログラム

    問題 Cプログラミング言語の再帰関数を使用して、指定された2つの数値の最大公約数(GCD)を見つけます。 解決策 再帰関数を使用して、指定された2つの数値の最大公約数(GCD)を見つけるための解決策は、次のとおりです- アルゴリズム 再帰関数を使用して、指定された2つの数値の最大公約数(GCD)を見つけるには、以下のアルゴリズムを参照してください。 ステップ1 −再帰関数を定義します。 ステップ2 −2つの整数aとbを読み取ります。 ステップ3 −再帰関数を呼び出します。 a. if i>j b. then return the function with parameter

  2. Pythonを使用してバイナリグリッドを配置するための最小スワップを見つけるプログラム

    nxnのバイナリ行列があるとします。 1つのステップで、隣接する2つの行を選択し、それらを入れ替えるような操作を実行できます。行列の主対角線より上のすべてのノードが0になるように、必要な最小スワップの数をカウントする必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 1 0 0 1 1 1 0 0 -であるため、出力は2になります。 これを解決するには、次の手順に従います。 n:=行列の行数 m:=サイズnの配列を作成し、nで埋めます 0からn-1の範囲のiの